装饰器不只用于函数,还可用于处理类。它们使开发人员的逻辑意图更明显。
装饰器装饰类的方法:静态方法和类方法。
静态实例:
class Cat(): def __init__(self, breed, age): self.breed = breed self.age = age def cat_age(self): # 年龄 return self.age def breed(self): return self.breed # 品种 def __repr__(self): # 显示属性 return '{breed},{age}'.format(breed=self.breed, age=self.age) @staticmethod # 静态方法修饰cry def cry(): return 'nyao nyao,日本猫叫声' chip = Cat('中华田园猫', 4) print(chip.cry) #调用不带括号的静态方法,会返回方法的内存位置 print(chip.cry()) # 通过实例chip来调用静态方法 print(Cat.cry()) # 通过类来调用静态方法
类方法实例:(注意类方法由创建之前的@classmethod修饰,方法参数为cls而不是self)。
class Cat(): def __init__(self, breed, age): self.breed = breed self.age = age def cat_age(self): # 年龄 return self.age def breed(self): return self.breed # 品种 def __repr__(self): # 显示属性 return '{breed},{age}'.format(breed=self.breed, age=self.age) @staticmethod # 静态方法修饰cry def cry(): return 'nyao nyao,日本猫叫声' @classmethod # 必须有此修饰,只供类使用 def type(cls): if cls.__name__ == 'Cat': # 检查它来自哪个类,如果是Cat类,则输出信息 return '本土猫' else: return cls.__name__ # 会检查它来自哪个类,如果是Cat类的子类,则输出该类名称 chip = Cat('中华田园猫', 4) print(chip.type()) # 进入if条件 class Japanese_Cat(Cat): pass test = Japanese_Cat('日本族', 10) print(test.type()) # 进入else
G:\pyprojects\venv\Scripts\python.exe G:/pyprojects/zhuangshiqi.py
本土猫
Japanese_Cat
Process finished with exit code 0
一些设计框架如web框架或者图形界面设计等,通常会用装饰器来为开发人员自动化一些功能,使其工作更轻松。
例如许多web框架都包含一个@login_required,确保用户得到在站点上执行任何操作之前,已经通过了身份认证。
实例flask框架:
首先pip安装flask
浙公网安备 33010602011771号