(介绍了三个装饰器)
1.静态属性(数据属性)
2.类方法
3.静态方法
class A:
name = '小明' # 类A的数据属性
age = 2
n = 1
def __init__(self):
self.name1 = 12
def shuju(self): # a = A()==> 调用:a.shuju() 类似 a.name
print('我是类A的一个方法')
@property # 把类的函数属性变为数据属性,也就是封装成了数据属性,在通过实例访问时不用加括号
def shuju1(self): # a = A()==> 调用:a.shuju1 类似 a.name
print('我被装饰成了数据方法')
return self.name,self.age
# python 调用类中的函数方法时,需要先实例化,再通过self建立与方法的连接,从而调用
# 如果只想执行类的方法,不想跟任何实例有捆绑,则可以用classmethod装饰器
# 表示装饰器下面的方法是专门给类用的,实例不能用哦!
@classmethod # 不用实例化,直接通过类名调用里面的方法:A.lei() #会自动把类本身传给cls
def lei(cls): # cls 相当于A类的自身,就像实例化之后的self
print(cls)
print('----',cls.n) # 等效于:A.n
# @property :只与实例绑定,把类的方法变为数据属性,
# @classmethod :只与类绑定
# @staticmethod :不跟类绑定也不跟实例绑定。静态方法 也叫类的工具包
@staticmethod # 可以用类调用:A.wash_body("小狗","小猫","小马"); 也可以用实例调用:aa = A(); aa.wash_body("小狗","小猫","小马")
def wash_body(a, b, c):
print("%s %s %s 正在洗澡" %(a, b, c))
总结:
@property :只与实例绑定(所以有:self代表实例自身),把类的方法变为数据属性
@classmethod :只与类绑定(所以有:cls代表类自身)
@staticmethod :不跟类绑定也不跟实例绑定(所有没有默认参数)。
静态方法只在内存中生成一个,节省开销,(也叫类的工具包)
普通方法每个实例对象都拥有独立的一个,开销较大