我正在使用python的type
来动态声明某些类。类似的东西:
class ParentClass(object):
pass
for class_name in ['A', 'B', 'C', 'D', 'E']:
type(class_name, (ParentClass,), {})
print('subclasses of ParentClass:', ParentClass.__subclasses__())
通常,打印行打印1,然后打印2,3,4,最后打印所有5个子类。
但有时,它打印1,然后是2,然后是3,然后只打印1,然后是2个子类:只有类D
和E
。其他地方的ParentClass.__subclasses__()
只是数组[D, E]
。
最奇怪的是,在项目的其他地方更改其他完全不相关的代码会影响它。
是否有可能,因为我没有将类分配给任何名称,它们是垃圾收集?这就是为什么ParentClass.__subclasses__()
无法再找到类对象的原因了?
答案 0 :(得分:2)
是否有可能,因为我没有将类分配给任何名称,它们是垃圾收集?这就是为什么
ParentClass.__subclasses__()
无法再找到类对象的原因了?
是的,就是这样。有关__subclasses__
方法的信息,请参见the documentation:
每个新样式类都保留一个对其直接子类的弱引用列表。此方法返回所有仍然存活的引用的列表。