繁体   English   中英

如何在 Python 3.7 中重新实现 Python 的 __qualname__? (有一些小的调整)

[英]How to reimplement Python's __qualname__ in Python 3.7? (with some minor adjustments)

__qualname__属性对我很有用,因为它使函数__qualname__ 但是,我很难将其用于我的用例,因为:

  1. __qualname__返回一个字符串。 对于我的用例,我需要对父对象的引用。

  2. __qualname__有时返回super类而不是引用的类。 例如:

     class Parent(): def __init__(self): pass class Child(Parent): pass print(Child.__init__.__qualname__) # Prints: "Parent.__init__"
  3. 我正在开发的包需要健壮,据我__qualname__的边缘情况没有记录

除了使用ast解析 Python 文件之外, __qualname__可以通过检查在 Python3 中重新实现? Python 是如何实现__qualname__ 在重新实现核心功能时,我想我将能够针对我的用例进行调整。


先前的研究:

我无法在 Python 源代码中找到 qualname 实现。

你不会得到你想要的。 您希望your_thing(Parent.__init__)说一些关于Parentyour_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM