我有一些代码通过调用基类上的__subclasses__()
函数来创建子类的(实例)列表。在
subclasses = [subclass() for subsclass in BaseClass.__subclasses__()]
在Python2.7中,这个列表中的子类的顺序始终等于我的代码中import语句的顺序(每个子类都在它自己的Python文件中定义)。但是在Python3.5中,这个列表中的子类的顺序似乎是随机的。在python3.5中,我可以使用某种变通方法来获得相同的行为吗?在
参见^{} documentation。在
Tags:
在python3.5中,没有,不是通过任何简单的方法。As of Python 3.4,
tp_subclasses
数据结构通过字典跟踪子类(将子类的id()
值映射到弱引用,请参见Python issue #17936了解原因)。字典是无序的。在在Python3.6中,字典的内部实现发生了变化,现在它们跟踪插入顺序。当您升级到python3.6时,您将再次按照插入顺序(Python第一次看到它们的顺序)获得子类。在
然而,子类在字典中被跟踪的事实是实现细节,不应该真正依赖它。在
你可以用其他方法跟踪订单。可以给基类一个按顺序记录子类的元类,例如:
相关问题 更多 >
编程相关推荐