python - 将装饰器附加到类中的所有函数

标签 python class oop decorator class-method

我真的不需要这样做,但只是想知道,有没有办法将装饰器一般地绑定(bind)到类中的所有函数,而不是为每个函数显式声明它。

我想它会变成一种方面,而不是装饰器,它确实感觉有点奇怪,但考虑到时间或身份验证之类的东西会很整洁。

最佳答案

执行此操作或对类定义进行其他修改的最简洁方法是定义元类。

或者,只需使用 inspect 在类定义的末尾应用您的装饰器:

import inspect

class Something:
    def foo(self): 
        pass

for name, fn in inspect.getmembers(Something, inspect.isfunction):
    setattr(Something, name, decorator(fn))

在实践中,您当然希望更有选择性地应用您的装饰器。当您想要装饰除一种方法之外的所有方法时,您会发现仅以传统方式使用装饰器语法更容易、更灵活。

关于python - 将装饰器附加到类中的所有函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467526/

相关文章:

c++ - "pointer being freed was not allocated"

javascript - 如何将 javascript 应用程序拆分为多个文件?

python - 从 python 生成电影而不将单个帧保存到文件

python - Pandas - 带小数位数的列

python - 如何从一个Python文件中的多个类中导入一个类

java - 我很难理解 Java 对象和类

class - 在 TypeScript 中声明动态添加的类属性

delphi - 重新引入 Delphi 中的函数

oop - 抽象和封装有什么区别?

python - 查找二维数组中具有某些非零元素的列的索引