我在 python 包中定义了几个函数,该包由几个模块组成,这些模块代表模拟模型的单独组件。
__name__
为了执行仿真模型,导入包并通过迭代模块来提取函数及其函数,__dict__
如下所示:
import model # The package containing python modules
import inspect
import types
# Get the modules defined in the package
modules = [v for v in vars(model).values() if isinstance(v, types.ModuleType)]
funcs = {}
# Iterate through modules in python package
for module in modules:
# Go through objects in module `__dict__`
for name, obj in vars(module).items(): # decorated functions no longer appear here
# Check for functions
if isinstance(obj, types.FunctionType):
# Make sure that the function is defined within the model package
mod, *sub_mod = inspect.getmodule(obj).__name__.split('.')
if mod == model.__name__:
# Store the function along with its name
funcs[name] = obj
但是,当我调试这段代码时,我注意到一些应该在vars(module).items()
的函数不是。这发生在将lru_cache
装饰器应用于某些功能之后,这些功能恰恰是没有出现的功能。
为什么在对 python 包中的某些函数应用装饰器后,它们没有出现在__dict__
为其定义它们的模块中?
有没有办法仍然可以应用装饰器并显示功能vars(module).items()
?