当前位置: 首页 > 面试题库 >

定义一个完整的模块的Python装饰器

党博超
2023-03-14
问题内容

我有一个包含很多功能的模块(超过25个)。我想向每个函数添加一个通用的装饰器函数。正常的方法是在每个函数上方添加@decorator行,但我想知道是否有更好的方法?也许我可以在模块顶部或其他位置声明全局装饰器?

请注意,由于我使用的是其他人的代码,因此我想减少更改的行数,因此修改模块对我而言并不理想。

谢谢。


问题答案:

如果您的装饰员被称为 my_decorator

### Decorate all the above functions
import types
for k,v in globals().items():
    if isinstance(v, types.FunctionType):
        globals()[k] = my_decorator(v)

您也可以在导入后将其应用于模块

import othermodule
import types
for k,v in vars(othermodule).items():
    if isinstance(v, types.FunctionType):
        vars(othermodule)[k] = my_decorator(v)


 类似资料:
  • 问题 你想定义一个可以接受参数的装饰器 解决方案 我们用一个例子详细阐述下接受参数的处理过程。 假设你想写一个装饰器,给函数添加日志功能,同时允许用户指定日志的级别和其他的选项。 下面是这个装饰器的定义和使用示例: from functools import wraps import logging def logged(level, name=None, message=None):

  • 问题内容: 给定Python模块的完整路径,如何加载它?注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项。 问题答案: 对于Python 3.5+,请使用: 对于Python 3.3和3.4,请使用: (尽管在Python 3.4中已弃用此功能。) 对于Python 2,请使用: 编译后的Python文件和DLL具有等效的便捷功能。

  • 主要内容:自定义模块编写说明文档到目前为止,读者已经掌握了导入 Python 标准库并使用其成员(主要是函数)的方法,接下来要解决的问题是,怎样自定义一个模块呢? 前面章节中讲过,Python 模块就是 Python 程序,换句话说,只要是 Python 程序,都可以作为模块导入。例如,下面定义了一个简单的模块(编写在 demo.py 文件中): 可以看到,我们在 demo.py 文件中放置了变量(name 和 add)、函数(

  • 本文向大家介绍详解Python模块化编程与装饰器,包括了详解Python模块化编程与装饰器的使用技巧和注意事项,需要的朋友参考一下 我们首先以一个例子来介绍模块化编程的应用场景,有这样一个名为requirements.py的python3文件,其中两个函数的作用是分别以不同的顺序来打印一个字符串: 其执行结果如下所示: 在两个函数中都使用到了同样的打印功能,这时候我们可以考虑,是不是可以将这两个打

  • 问题 你想在类中定义装饰器,并将其作用在其他函数或方法上。 解决方案 在类里面定义装饰器很简单,但是你首先要确认它的使用方式。比如到底是作为一个实例方法还是类方法。 下面我们用例子来阐述它们的不同: from functools import wraps class A: # Decorator as an instance method def decorator1(self,

  • 问题内容: 我受够了在函数中不断重复输入相同的重复命令。我想知道我是否可以写一个装饰器为我做这项工作。这是我的问题的一个示例: 有什么方法可以自动将所有传递给函数的参数变成具有相同名称的实例变量?例如: 哪里会自动设置和。我该怎么办? 谢谢! 编辑:我应该提到我使用CPython 2.7。 问题答案: 这是我第一次尝试装饰器: 编辑第二尝试:我添加了处理变量的默认值和检查有效的关键字。 [编辑3: