面向对象相关,类属性,私有属性和方法,类方法,静态方法
实例属性
通过类创建的对象被称为 实例对象,对象属性又称为实例属性,记录对象各自的数据,不同对象的同名实例属性,记录的数据各自独立,互不干扰。
类属性
类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有,类属性可以通过类对象或者实例对象访问。
class Dog: type = "狗" # 类属性 dog1 = Dog() dog2 = Dog() # 不管是dog1、dog2还是Dog类,都可以访问到type属性 print(Dog.type) # 结果:狗 print(dog1.type) # 结果:狗 print(dog2.type) # 结果:狗
私有属性和方法
在定义属性或方法时,在属性名或者方法名前增加两个下划线__
,定义的就是私有属性或方法。
访问私有属性和方法
在私有属性名或方法名前添加 _类名
class Person: def __init__(self,name,age): self.name = name self.age = age self.__money = 2000 def __shopping(self, cost): self.__money -= cost p = Person('李四',20) print(p._Person__money) # 使用对象名._类名__私有属性名 可以直接访问对象的私有属性 p._Person__shopping(100) # 使用对象名._类名__函数名 可以直接调用对象的私有方法 print(p._Person__money)
这种方法不推荐使用
定义方法访问私有变量
class Person: def __init__(self,name,age): self.name = name self.age = age self.__money = 2000 # __money 是私有变量,外部无法访问 def get_money(self): # 定义了get_money 方法,在这个方法里获取到 __money return self.__money # 内部可以访问 __money 变量 def set_money(self,money): # 定义了set_money 方法,在这个方法里,可以修改 __money self.__money = money p = Person('王五',21) # 外部通过调用 get_money 和 set_money 这两个公开方法获取和修改私有变量 print(p.get_money()) p.set_money(8000) print(p.get_money())
类方法
需要用装饰器@classmethod
来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls
作为第一个参数。
class Dog(object): __type = "狗" # 类方法,用classmethod来进行修饰 @classmethod def get_type(cls): return cls.__type print(Dog.get_type())
静态方法
1.需要通过装饰器@staticmethod
来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)
2.静态方法 也能够通过 实例对象 和 类对象 去访问
class Dog(object): type = "狗" def __init__(self): name = None # 静态方法 @staticmethod def introduce(): # 静态方法不会自动传递实例对象和类对象 print("犬科哺乳动物,属于食肉目..") dog1 = Dog() Dog.introduce() # 可以用 实例对象 来调用 静态方法 dog1.introduce() # 可以用 类对象 来调用 静态方法