如何获取注入方法的依赖项列表,但看不见?
指向一些阅读也会很棒:)
示例:
external_object = "abc"
def func(data, params)
print(external_object)
...
def get_list_of_dependencies(func):
# TODO
依赖项的获取列表将打印出外部对象。我试图这样做的原因是因为我试图记住函数func,但由于这些外部依赖注入到函数中,我创建的哈希并不完全有用。
谢谢!
答案 0 :(得分:2)
我相信您可以通过检查附加到__code__
对象的function
对象来实现您的目标。例如:
在名为funcs.py
的文件中:
external_object = "external object"
def f():
print(external_object)
nested = "nested"
def g():
print(nested)
return g
现在,在翻译会话中:
键入" help"," copyright"," credit"或"许可证"了解更多信息。
>>> import funcs
>>> funcs.f.__code__.co_names
('print', 'external_object')
>>>
或者如果你想要局部变量:
>>> funcs.f.__code__.co_cellvars
('nested',)
您还可以访问其他内容,例如自由变量。请注意,nested
是g
:
>>> g = funcs.f()
external object
>>> g.__code__.co_names
('print',)
>>> g.__code__.co_freevars
('nested',)
>>>
详细了解可用属性here。我注意到,依靠这一点并不是一个好主意,因为正如文档中所警告的那样,
他们的定义可能会随着解释器的未来版本而改变, 但是为了完整起见,这里提到了它们。
答案 1 :(得分:0)
函数的代码对象(在__code__
属性中找到)包含几个属性,这些属性给出代码对象本身使用的值和名称,例如: co_consts
,co_names
等