obj之上的python命名空间层次结构

2024-04-25 07:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果此代码包含在名为some\u module的模块中

class C:
    class C2:
        def g(self):
            @printNamespaceAbove
            def f():
                pass

然后将定义上面的printNamespace,这样代码将输出类似

^{pr2}$

Tags: 模块代码self定义defsomepassclass
1条回答
网友
1楼 · 发布于 2024-04-25 07:06:31

没有办法让这段代码有任何输出,g的主体(包括您想要打印的装饰器)在g被调用之前不执行。我假设您并不打算让“this code”自己输出任何东西,而是打算添加一个调用,例如C.C2().g()[它将实际执行输出]。在

其实没有一种非常有效的方法可以做到这一点,你(好吧,decorator;-)必须从模块级别开始(你可以通过f的全局参数来识别它,decorator的参数:它的名称是f.func_globals['__name__'],通过它的名称,你可以在sys.modules中查找它),然后,必须遍历所有可能的名称链,直到找到调用函数为止(例如,通过标准库中的inspect模块)。还请注意,嵌套函数在一些角落的情况下是一个特别令人头痛的问题。在

相关问题 更多 >