前面讲解了python里类的定义和特性等,此次讲解类属性与实例属性,类方法与实例方法,照样用例子说明。
一、类属性
类属性是直接定义在类中的属性,通常用于存储类的全局数据(配置、常量等)。类属性所有实例共享,通过实例和类名都可以访问,但不能通过实例来修改,否则会生成一个和类属性名字一样的实例属性(类属性只能通过 “类名.类属性名” 作修改)。通过实例和类名都可以访问。
例:
class animal():
count=0 #类属性
。。。
animal.count+=1 #正确:修改类属性
dog=animal()
print(animal.count) #打印类属性(通过类访问)
print(dog.count) #打印类属性(通过实例访问)
dog.count=4 #错误:不能通过对象修改类属性
二、实例属性
在 init 方法中通过“”self.属性名 ”定义,修改某个实例属性不会影响到其它实例属性,只能通过 “实例.属性名” 访问。
例:
class animal():
def __init__(self,name,age):
self.name=name #实例属性
self.age=age #实例属性
dog=animal('mimi',3) #创建对象
print(dog.name,dog.age) #打印实例属性(实例访问)
三、类方法
使用@classmethod 装饰器,第一个参数是cls,只能直接访问和修改类属性,不能直接访问实例属性(除非传入实例,一般不这样用);通过实例和类名都可以调用类方法。
例:
class animal():
def __init__(self,name):
self.name=name #实例属性
@classmethod #装饰器
def call(cls,dog): #类方法,传入了实例dog
print(dog.name) #通过传入实例访问到实例属性name(不推荐)
print(f'喵喵叫。。。')
dog=animal() #创建对象
animal.call('mimi') #通过类调用类方法
dog.call('mimi') #通过实例调用类方法(不推荐)
四、实例方法
最常用的方法类型。第一个参数是self,用于操作(访问和修改)实例属性;需要(只能)通过 “实例.实例方法名()”调用。
例:
class animal():
def feature(self): #实例方法,第一个参数是self
print(f'{self.name}是只可爱的猫咪')
dog=animal() #创建对象
dog.feature() #通过实例调用
五、静态方法
使用 @staticmethod 装饰器,没有 self 或 cls 参数。通常用于工具函数(与类相关但不依赖于类状态),可以通过 “类名.静态方法名()” 和 "实例名.静态方法名()” 两种方法访问。
class animal():
@staticmethod #装饰器
def message(): #静态方法,无参数
print('一些动物名:')
print('猴子')
print('狮子')
print('狗')
dog=animal() #创建对象
animal.message() #通过类调用静态方法
dog.message() #通过实例调用静态方法