2024-04-25 07:06:31 发布
网友
例如,如果此代码包含在名为some\u module的模块中
class C: class C2: def g(self): @printNamespaceAbove def f(): pass
然后将定义上面的printNamespace,这样代码将输出类似
没有办法让这段代码有任何输出,g的主体(包括您想要打印的装饰器)在g被调用之前不执行。我假设您并不打算让“this code”自己输出任何东西,而是打算添加一个调用,例如C.C2().g()[它将实际执行输出]。在
其实没有一种非常有效的方法可以做到这一点,你(好吧,decorator;-)必须从模块级别开始(你可以通过f的全局参数来识别它,decorator的参数:它的名称是f.func_globals['__name__'],通过它的名称,你可以在sys.modules中查找它),然后,必须遍历所有可能的名称链,直到找到调用函数为止(例如,通过标准库中的inspect模块)。还请注意,嵌套函数在一些角落的情况下是一个特别令人头痛的问题。在
f
f.func_globals['__name__']
sys.modules
没有办法让这段代码有任何输出,g的主体(包括您想要打印的装饰器)在g被调用之前不执行。我假设您并不打算让“this code”自己输出任何东西,而是打算添加一个调用,例如C.C2().g()[它将实际执行输出]。在
其实没有一种非常有效的方法可以做到这一点,你(好吧,decorator;-)必须从模块级别开始(你可以通过
f
的全局参数来识别它,decorator的参数:它的名称是f.func_globals['__name__']
,通过它的名称,你可以在sys.modules
中查找它),然后,必须遍历所有可能的名称链,直到找到调用函数为止(例如,通过标准库中的inspect模块)。还请注意,嵌套函数在一些角落的情况下是一个特别令人头痛的问题。在相关问题 更多 >
编程相关推荐