如何重新实现Python';Python3.7中的s__;u qualname___;u?(稍作调整)
如何重新实现Python';Python3.7中的s__;u qualname___;u?(稍作调整),python,python-3.x,introspection,Python,Python 3.x,Introspection,\uuuu质量名称属性对我很有用,因为它将函数上下文化;但是,我很难将其用于我的用例,因为: \uuuuu qualname\uuuu返回一个字符串。对于我的用例,我需要对父对象的引用 \uuuu qualname\uuuu有时返回超级类而不是引用的类。例如: class父对象(): 定义初始化(自): 通过 班级儿童(家长): 通过 print(Child.\uuuu init.\uuuuu.\uuuuu qualname\uuuu)#print:“Parent.\uuuu init_uuu
\uuuu质量名称
属性对我很有用,因为它将函数上下文化;但是,我很难将其用于我的用例,因为:
\uuuuu qualname\uuuu
返回一个字符串。对于我的用例,我需要对父对象的引用
\uuuu qualname\uuuu
有时返回超级
类而不是引用的类。例如:
class父对象():
定义初始化(自):
通过
班级儿童(家长):
通过
print(Child.\uuuu init.\uuuuu.\uuuuu qualname\uuuu)#print:“Parent.\uuuu init_uuu”
\uuuuu qualname\uuuu
的边缘案例并不是我所能说的
ast
,是否可以通过检查在Python3中重新实现\uuu qualname\uuuu
?Python是如何实现\uuuuuqalname\uuuuu
?在重新实现核心功能的过程中,我认为我将能够根据我的用例对其进行调整
先前的研究:
- 政治公众人物3155:
- Python 2
实现:qualname
- 正在分析
以获取引用:\uuuuu qualname\uuuu
- Python 2
堆栈溢出:\uuuuqalname\uuuu
我在Python源代码中找不到qualname实现。您不会得到想要的。你想
your\u thing(Parent.\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
您已经通过两种不同的方式访问了该对象,但Python没有对此进行记录。无论您实现什么,都将只接收一个函数对象,而不接收您要查找的信息
即使你做了一些可怕的堆栈检查,看看你的东西(Child.\uuu init\uuu)
的源代码在里面写着“Child”,这对于函数被存储在变量中或通过多个函数调用层传递的情况也不起作用。它只在一小部分不需要它的情况下起作用,这是不可靠的,因为在编写代码时,您已经获得了所需的信息。您能否简要介绍一下使用\uuuu qualname\uuu
属性要实现的目标?也就是说,您希望使用\uuuuuu qualname\uuuuu
解决哪个问题?也许人们会想到其他方法。为什么在您的示例中将\uuuu qualname\uuu
输出称为“意外”?由于子类不重写\uuuuu init\uuuu
,所以它从父类继承\uuuu qualname\uuuuu
返回方法引用的字符串路径,在本例中,该路径将是父级\uuuuuu init\uuuuu
。感谢您对此进行研究:)@klas我希望重建给定函数或方法引用的虚线路径。例如,如果提供了对Child.\uuu init\uuu
的引用,我希望能够返回一个由[Child,Child.\uu init\uuu]
组成的列表。这是类似的,但比这样的事情更一般:它发生在编译时,并在解析树信息的基础上工作。。。我正在尝试:“在Python3.7中重新实现Python的\uuuu qualname\uuuu
”。你能帮我吗?为了有所帮助,我调整了帖子,以澄清我的意图和观点。很抱歉给你带来困惑,谢谢你的耐心。我已经尽力了!如前所述,目标是在MichaelPetrochuk重新实施\uuuuuu qualname\uuu
:目标是通过调整来重新实施\uuuuuu qualname\uu
,其中一项是不可能的。(调整1非常简单,但调整2却不是。)如果不是为了调整,您只需使用\uuuuuu qualname\uuuuu
。