面向对象2
1.类的成员:变量,方法,属性
1.变量:
实例变量(字段):
公有实例变量:
1 class Foo: 2 def __init__(self,name): 3 self.name = name#公有实例变量 4 5 def func(self): 6 print(self.name) 7 8 obj = Foo('a') 9 obj.func()
私有实例变量:
1 class Foo: 2 def __init__(self): 3 pass 4 5 def __func(self):#私有实例变量 6 print("私有实例变量") 7 8 obj = Foo() 9 obj.func()#会报错
类变量(静态字段):
公有类变量:
1 class Foo: 2 a = 1#公有类变量 3 def __init__(self): 4 pass 5 6 def func(self): 7 print(self.a) 8 9 obj = Foo() 10 obj.func()
私有类变量:
1 class Foo: 2 __a = 1#私有类变量 3 def __init__(self): 4 pass 5 6 def func(self): 7 print(self.a)#会报错 8 9 obj = Foo() 10 obj.func()
总结:
1.公有:
实例变量(字段)访问时,使用对象访问,即obj.name
类变量(静态字段)访问时,使用类方法,即:Foo.name
2.私有:
实例变量(字段)访问时,外部无法直接调用私有实例变量,必须从内部方法调用私有成员
类变量(静态字段)访问时,外部无法直接调用私有类变量,必须从内部调用私有成员
如果是子类继承父类,也必须先在父类中调用私有成员,子类才能调用
2.方法:实例方法,静态方法,类方法
1.实例方法
1 class Foo: 2 def __init__(self,name) 3 self.name = name 4 #实例方法 5 def func(self): 6 print(self.name) 7 8 obj = Foo("abc") 9 obj.func()
2.静态方法
1 class Foo: 2 def __init__(self,name): 3 self.name = name 4 #静态方法,如果方法无需使用对象中封装的值,就可以使用静态方法 5 6 @staticmethod 7 def display(a1,a2): 8 return a1+a2 9 10 Foo.display(1,2)
3.类方法
1 class Foo: 2 #类方法,cls是类 3 @classmethod 4 def show(cls,x1,x2): 5 print(cls,x1,x2) 6 7 #执行类方法 8 Foo.show(1,2)