python - 如何在 Python 中设置嵌套类的显示名称?
问题描述
我有一个场景,我有多个同名的嵌套类,调试它让我发疯。
这是一个草图:
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)水果中有一些使用
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 中是不可能的。
推荐阅读
- sql - 我的 SQL 代码没有提取 MS Access 中的数据
- javascript - 用户位置不返回任何值
- java - 为什么在静态初始化程序中使用并行流会导致不稳定的死锁
- java - Java 龟博士项目——我似乎无法调试我的错误
- php - laravel save() 方法会抛出异常吗?
- c++ - CMake包含系统和项目头文件之间的路径冲突
- timestamp - 似乎无法将时间戳转换为正确的日期时间
- mysql - 检查日期列是否在某个时期,这取决于另一个日期列
- javascript - 旧文件从 jQuery 文件上传控件中删除
- python-2.7 - 来自客户端-服务器(udp)连接python 2.7的数据包嗅探器(仅限)