面向对象的3个装饰器
作者:互联网
@property # 伪类装饰器
把方法伪装成属性,调用的时候直接 对象.方法, 让我们的语义更加合理
#比如计算学生的年龄,传生日 import time class Student: def __init__(self,name,birth): self.name=name self.birth=birth @property # 伪类装饰器,把方法伪装成属性,让我们的语义更加合理 def age(self): return time.localtime().tm_year-self.birth zhangsan=Student('张三',1998) print(zhangsan.age) # 一般调用方法名,要写成 zhangsan.age(),用@property 当成属性来调用
@staticmethod 静态方法装饰器
可以将类中的实例方法,通过类名直接调用,不经过实例化
该装饰器调用的时候不需要传self,cls参数
缺点:无法调用带有普通self的函数
# class Cat: # def __init__(self,name,color): # self.name=name # self.color=color # # def eat(self): # print(self.name,'喜欢吃鱼') # # @staticmethod # def color(): # print('ssssss') # # Cat.color()
@classmethod 类方法装饰器
可以将类里面的方法不经过实例化直接调用
class Manager: def __init__(self,name): self.name=name print(self.name) @classmethod def login(cls): print('cls',cls) print('Manager',Manager) # 两者同一个地址 username=input('>>>>') # cls(username) Manager(username) Manager.login()
总结:
@property 把方法伪装成属性
@staticmethod 静态方法,没有默认参数,可以通过类名来调用,不需要实例化
@classmethod 类方法, cls作为默认参数,可以通过类名来调用,不需要实例化
标签:__,调用,name,self,面向对象,装饰,def,cls 来源: https://www.cnblogs.com/gm11/p/16444231.html