成员分为三大类:变量 / 方法 / 属性
1.变量: 分为实例变量与类变量
实例变量(字段):在__init__方法进行定义的
类变量(静态字段): 直接在类里面定义的,一般应用在当所有对象中的有共同的字段,且要改都改,要删都删的时候
class foo(object): addres = "世界之窗" # 类变量 def __init__(self,name,age): self.name = name # 实例变量 self.age = age
2.方法:实例方法 / 静态方法 / 类方法
静态方法:定义时需要在方法上面加@staticmethod,可不传值
类方法:定义时需要在方法上面加@classmethod,至少要传一个参数cls,一般应用在代码中需要用到当前类的时候
class foo: def __init__(self,name): self.name=name def f1(self): # 实例方法 self 是对象 print(self.name) # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法 @staticmethod def f2(): print(6666) # 类方法 @classmethod def f3(cls,x1,x2): # 类方法里至少要传一个值cls print(cls,x1,x2) # cls 打印的是当前类的名字 obj = foo('123') obj.f1() # 实例方法需要先进行实例化对象再用,对象进行调用 <<<123 foo.f2() # 静态方法可以直接使用类名进行调用也可以用实例化对象进行调用 <<<6666 foo.f3(12,45) # 类方法可以直接使用类名进行调用也可以用实例化对象进行调用 <<< <class '__main__.foo'> 12 45
3.属性(通过方法改造出来的):
定义时需要在方法上面加@property,调用时无需加括号直接对象.方法进行调用,一般应用在无需传参时且有返回值时可以使用
class foo: def __init__(self): pass def f1(self): print(self) # 属性,写属性的时候不能加参数,只能是self @property def f2(self): return 10 obj = foo() print(obj.f2) <<<10
4.私有与公有:变量、方法和属性都有私有与公有
1.私有:只能内部访问不能外部直接访问,如果外部要访问要借助里面的进行访问
2.公有:外面与内部都可以访问
class foo(object): __city="北京" # 私有类变量 def __init__(self,name): # 私有实例变量 self.__name = name def __display1(self): # 私有实例方法 pass @staticmethod def __display2(): # 私有静态方法 pass @classmethod def __display3(cls): # 私有类变量 pass @property def __display4(self): # 私有属性 return 10