类成员的进一步阐述

class Foo:
    #类变量(静态字段)
    country = "中国"
    
    def  _init_(self,name)
        实例变量(字段)
        self.name = name
        
    def func(self):
        pass

#知识点一:
'''
准则:
    实例变量(字段)访问时,使用对象访问,既:obj1.name
        类变量(静态变量)访问时,推荐使用类方法,既:Foo.country (实在不行,才使用对象)
        

obj1 = Foo('李光辉')
obn2 = Foo("王岗")
print(obj1,name)
print(Foo.country)  

# 知识点一:易错点
"""
obj1 = Foo('季红')
obj2 = Foo('王晓东')

# 练习1
# obj1.name = 'alex'
# print(obj1.name) # alex
# print(obj2.name) # 王晓东

# 练习2
# obj1.country = '美国'
# print(obj1.country) # 美国
# print(obj2.country) # 中国

# 练习3
# Foo.country = '美国'
# print(obj1.country) # 美国
# print(obj2.country) # 美国
"""


# 知识点一: 什么时候用类变量?
# 当所有对象中有共同的字段时且要改都改要删都删时,可以将 实例变量(字段) 提取到 类变量(静态字段)

'''
# ######################## 公有实例变量(字段) ########################
class Foo:

    def __init__(self, name):
        self.name = name
        self.age = 23

    def func(self):
        print(self.name)

obj = Foo("张娜拉")
print(obj.name)
print(obj.age)
obj.func()
张娜拉
23
张娜拉

class Foo:

    def __init__(self, name):
        self.__name = name
        self.age = 22

    def func(self):
        print(self.__name)

obj = Foo("杰森斯坦森")
print(obj.age)
obj.func()
22
杰森斯坦森'''
# ######################## 类变量(静态字段) ########################
"""
class Foo:
    country = "中国"

    def __init__(self):
        pass

    def func(self):
        # 内部调用
        print(self.country)
        print(Foo.country) # 推荐


# 外部调用
print(Foo.country)

obj = Foo()
obj.func()
"""

# ######################## 私有类变量(私有静态字段) ########################
"""
class Foo:
    __country = "中国"

    def __init__(self):
        pass

    def func(self):
        # 内部调用
        print(self.__country)
        print(Foo.__country)  # 推荐

# 外部无法调用私有类变量
# print(Foo.country)

obj = Foo()
obj.func()
'''
'''
class Base():
    _secret = "做一些不可描述的事情"

    def zt(self):
        pass
        # print(Base._secret)

class Foo(Base):

     def func(self):
         print(self._secret)
         print(Foo._secret)

obj = Foo()
obj.zt()
'''

class Foo(object):
    def __init__(self, name):
        self.name = name

        #实例方法
    def func(self):
        print(self.name)


        #静态方法,如果方法无需使用队形中封装的值,name可以使用静态方法
    @staticmethod
    def display(a1, a2):
        return a1 + a2

obj = Foo(" 蒙娜丽莎的微笑")
obj.func()

ret = Foo.display(1, 3)
print(ret)
蒙娜丽莎的微笑
4

总结
    1. 编写时:
        - 方法上分写 @staticmethod
        _方法参数可有可无
    2. 调用时:
        - 类.方法名() ***
        - 对象.方法名()
    3. 什么时候写静态方法?
         - 无需调用对象中已封装的值,那么就可以使用静态方法



class  Foo(object):
    def __init__(self, name):
        self.name = name


    def  func(self):
        print(self.name)

    @staticmethod
    def display(a1,a2):
        return  a1 + a2

    @classmethod
    def show(cls, x1, x2):
        print(cls, x1, x2)
Foo.show(1, 8)
print(Foo.display(1, 3))
执行类方法

总结
    1.定义时:
        - 方法上方写: @classmethod
        - 方法的参数: 至少有一个cls参数
    2.执行时:
        -类名,方法名() #默认会将当前类传到参数中.
    3.什么时候用?
        -如果在方法中会使用到当前类,那么就是用类方法
'''

 

posted @ 2018-08-28 17:48  玩蛇少年7372  阅读(104)  评论(0编辑  收藏  举报