类成员的进一步阐述
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.什么时候用? -如果在方法中会使用到当前类,那么就是用类方法 '''