将装饰器定义为类的一部分
2019-02-20 本文已影响0人
noteby
场景:在类中定义装饰器,并将其作用在其他函数或方法上。
from functools import wraps
class A:
# Create a property
@property
def first_name(self):
return self._first_name
# Apply decorator methods
@first_name.setter
def first_name(self, value):
if not isinstance(value, str):
raise TypeError('Expected a string')
self._first_name = value
# Decorator as an instance method
def decorator1(self, func):
@wraps(func)
def wrapper(*args, **kwargs):
print('Decorator 1')
return func(*args, **kwargs)
return wrapper
# Decorator as a class method
@classmethod
def decorator2(cls, func):
@wraps(func)
def wrapper(*args, **kwargs):
print('Decorator 2')
return func(*args, **kwargs)
return wrapper
# As an instance method
a = A()
@a.decorator1
def func1():
print('func1')
# As a class method
@A.decorator2
def func2():
print('func2')
if __name__ == '__main__':
func1()
func2()
a.first_name = 'lily'
print(a.first_name)