是否可以制作一个我可以应用于类和方法的装饰器?
例子:
@my_dec(1)
class MyClass(object):
@my_dec(2)
def my_method(self):
# something here
assert MyClass._x == 1
assert MyCLass.my_method._x == 2
最佳答案
是的,这是可能的。基本上你需要创建一个接受值 1 或 2 的函数,然后返回函数或类对象稍后传递给的实际装饰器,现在在装饰器内部我们可以使用 setattr
来设置类或函数对象的属性。
def my_dec(x):
# Here x is going to be the argument passed to my_dec, i.e 1 or 2
def decorator(func_or_cls):
setattr(func_or_cls, '_x', x)
return func_or_cls
return decorator
@my_dec(1)
class MyClass(object):
@my_dec(2)
def my_method(self):
pass
assert MyClass._x == 1
assert MyClass.my_method._x == 2
要了解装饰器的工作原理,请阅读这个很棒的答案:How can I make a chain of function decorators in Python?
关于python - 类和方法的一个装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529923/