【问题标题】:How do you set the display name of nested classes in Python?如何在 Python 中设置嵌套类的显示名称?
【发布时间】:2019-08-09 07:12:36
【问题描述】:

我有一个场景,我有多个同名的嵌套类,调试它让我发疯。

这是一个草图:

class Reference(object):
    # common functionality here

class Fruit(object):
    # common functionality here

class Apple(Fruit):
    class Ref(Reference):
        # specific functionality here

class Orange(Fruit):
    class Ref(Reference):
        # specific functionality here

# like 6 more fruits

我的问题:任何列出引用对象类名的操作都将其显示为mymodule.Ref,而不是mymodule.Apple.Ref,这样会更有帮助。

有没有办法告诉 Python 为我的嵌套类的实例使用更好的名称?默认__str__,也可以在__type__等中

奖金详情:

  • 扁平化类结构和/或使用唯一名称可以做到这一点,但是 (a) 这会增加命名空间的混乱,并且 (b) Fruit 中有一些位使用cls.Ref/self.Ref。次优。
  • 这是一个遗留的 2.7 研究系统,如果这很重要的话。实际上,如果 3 解决了这个问题,那将是我升级我们的参数桶的有用补充......

【问题讨论】:

  • 这不是你在 Python 中永远不会做的事情。
  • @DanielRoseman Django 使用嵌套类 Meta。

标签: python class inner-classes


【解决方案1】:

实际上 Python 3 确实使用 __qualname__ 解决了这个问题。是时候升级了。

https://www.python.org/dev/peps/pep-3155/#example-with-nested-classes

根据 PEP 基本原理(PEP 3155 -- 类和函数的限定名称),您想要的在 2.7 中是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多