gpt4 book ai didi

对象上方的python命名空间层次结构

转载 作者:行者123 更新时间:2023-12-04 17:00:53 25 4
gpt4 key购买 nike

例如,如果此代码包含在名为 some_module 的模块中

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

然后将定义 printNamespaceAbove 以便此代码将输出类似
[some_module,C,C2,g]

最佳答案

没有办法让这个代码,正如所展示的那样,有任何输出——g 的主体(包括你想要打印的装饰器)在 g 被调用之前根本不执行。我假设您实际上并不打算让“此代码”自己输出任何内容,而是打算添加一个诸如 C.C2().g() 之类的调用 [它实际上会执行输出]。

没有一个非常有效的方法来做到这一点——你(嗯,装饰器;-)必须从模块级别开始(你可以通过 f 的全局变量来识别,装饰器的参数:它的名字是 f.func_globals['__name__']并且通过它的名字,你可以在 sys.modules 中查找它),然后你必须遍历每一个可能的名字链,直到找到你的调用函数(例如,通过标准库中的 inspect 模块)。还要注意嵌套函数在几个极端情况下是一个特别令人头疼的问题。

关于对象上方的python命名空间层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com