python - 类和方法的一个装饰器

标签 python python-2.7 python-3.x python-decorators

是否可以制作一个我可以应用于类和方法的装饰器?

例子:

@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/

相关文章:

python - 测试 SSH 可用性的优雅方式

python - 使用 pygame 的基于图 block 的游戏问题/问题

python - 3向量级数LSTM不能突破0.5精度

python-2.7 - 从 Pandas 数据帧保存没有双引号的csv文件

google-app-engine - 来自 GAE 的 GCM 的 API key

python - 有没有办法在 Python 3 中子类化生成器?

python - 使用 Python 中的 Keras 和 TensorFlow 无法重现结果

python - Python : IndexError: index 7 is out of bounds for axis 1 with size 7

python - 合并两个 PDF

python - 绘制 pandas 中随时间变化的行数