Python中嵌套的类如何设置显示名称?
How do you set the display name of nested classes in Python?
我有一个场景,我有多个嵌套的 class 都是同名的,调试它让我抓狂。
这是一个草图:
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
我的问题:任何列出引用对象的 class 名称的操作都将其显示为 mymodule.Ref
而不是 mymodule.Apple.Ref
,这会更有帮助。
有没有办法告诉 Python 为我的嵌套 classes 的实例使用更好的名称?默认为 __str__
,但也有 __type__
,等等
奖金详情:
- 扁平化 class 结构 and/or 使用唯一的名称就可以了,但是 (a) 这增加了命名空间的混乱,并且 (b) Fruit 中有一些位使用
cls.Ref
/self.Ref
。次优。
- 如果重要的话,这是一个遗留的 2.7 研究系统。实际上,如果 3 已经解决了这个问题,那将是对我升级我们的论据桶的有用补充...
实际上 Python 3 确实用 __qualname__
解决了这个问题。是时候升级了。
https://www.python.org/dev/peps/pep-3155/#example-with-nested-classes
根据 PEP 基本原理(PEP 3155 -- 类 和函数 的限定名称),您想要的在 2.7 中是不可能的。
我有一个场景,我有多个嵌套的 class 都是同名的,调试它让我抓狂。
这是一个草图:
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
我的问题:任何列出引用对象的 class 名称的操作都将其显示为 mymodule.Ref
而不是 mymodule.Apple.Ref
,这会更有帮助。
有没有办法告诉 Python 为我的嵌套 classes 的实例使用更好的名称?默认为 __str__
,但也有 __type__
,等等
奖金详情:
- 扁平化 class 结构 and/or 使用唯一的名称就可以了,但是 (a) 这增加了命名空间的混乱,并且 (b) Fruit 中有一些位使用
cls.Ref
/self.Ref
。次优。 - 如果重要的话,这是一个遗留的 2.7 研究系统。实际上,如果 3 已经解决了这个问题,那将是对我升级我们的论据桶的有用补充...
实际上 Python 3 确实用 __qualname__
解决了这个问题。是时候升级了。
https://www.python.org/dev/peps/pep-3155/#example-with-nested-classes
根据 PEP 基本原理(PEP 3155 -- 类 和函数 的限定名称),您想要的在 2.7 中是不可能的。