0
例如,如果这个码被包含在一个叫做some_module蟒命名空间层次结构上述目的
class C:
class C2:
def g(self):
@printNamespaceAbove
def f():
pass
模块中
然后printNamespaceAbove将被定义,使得该代码将输出像
[some_module,C,C2,g]
例如,如果这个码被包含在一个叫做some_module蟒命名空间层次结构上述目的
class C:
class C2:
def g(self):
@printNamespaceAbove
def f():
pass
模块中
然后printNamespaceAbove将被定义,使得该代码将输出像
[some_module,C,C2,g]
有没有办法让代码如上所述,有任何输出 - g的主体(包括你想要打印的装饰器)不会执行直到g被调用。我假设你并不是真的打算单独输出“this code”来输出任何内容,而是打算添加一个诸如C.C2()。g()这样的调用,这将实际上完成输出。
有没有真正做到这一点非常有效的方式 - 你(当然,装饰;-)必须在模块级(您可以通过f
的全局识别开始,装饰的说法:它的名字是f.func_globals['__name__']
并通过它的名字你可以在sys.modules
中查找它),那么你必须沿着每一个可能的名字链,直到你找到你的调用函数(例如通过标准库中的inspect模块)。还要注意,嵌套函数在几个角落案例中特别令人头疼。