[英]How to reimplement Python's __qualname__ in Python 3.7? (with some minor adjustments)
__qualname__
属性对我很有用,因为它使函数__qualname__
; 但是,我很难将其用于我的用例,因为:
__qualname__
返回一个字符串。 对于我的用例,我需要对父对象的引用。
__qualname__
有时返回super
类而不是引用的类。 例如:
class Parent(): def __init__(self): pass class Child(Parent): pass print(Child.__init__.__qualname__) # Prints: "Parent.__init__"
我正在开发的包需要健壮,据我__qualname__
的边缘情况没有记录。
除了使用ast
解析 Python 文件之外, __qualname__
可以通过检查在 Python3 中重新实现? Python 是如何实现__qualname__
? 在重新实现核心功能时,我想我将能够针对我的用例进行调整。
先前的研究:
qualname
实现: https : //github.com/wbolster/qualname/blob/master/qualname.py__qualname__
以获取引用: 在 Python 3 中获取未绑定方法对象的定义类__qualname__
stackoverflow: 在早期 Python 中重现 Python 3.3 __qualname__ 的效果我无法在 Python 源代码中找到 qualname 实现。
你不会得到你想要的。 您希望your_thing(Parent.__init__)
说一些关于Parent
而your_thing(Child.__init__)
说一些关于Child
,但Parent.__init__
和Child.__init__
是完全相同的对象。
您已经通过两种不同的方式访问了该对象,但 Python 并没有对此进行记录。 无论您实现什么,都只会收到一个函数对象,而没有您正在寻找的信息。
即使您做了一些可怕的堆栈检查来查看your_thing(Child.__init__)
的源代码在your_thing(Child.__init__)
说“Child”这一事实,这也不适用于函数存储在变量中或传递的情况通过更多的函数调用层。 它只会在您不需要它的一小部分情况下不可靠地工作,因为您在编写代码时已经拥有所需的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.