用`type`动态定义的python类消失

时间:2015-09-29 21:23:17

标签: python

我正在使用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个子类:只有类DE。其他地方的ParentClass.__subclasses__()只是数组[D, E]

最奇怪的是,在项目的其他地方更改其他完全不相关的代码会影响它。

是否有可能,因为我没有将类分配给任何名称,它们是垃圾收集?这就是为什么ParentClass.__subclasses__()无法再找到类对象的原因了?

1 个答案:

答案 0 :(得分:2)

  

是否有可能,因为我没有将类分配给任何名称,它们是垃圾收集?这就是为什么ParentClass.__subclasses__()无法再找到类对象的原因了?

是的,就是这样。有关__subclasses__方法的信息,请参见the documentation

  

每个新样式类都保留一个对其直接子类的弱引用列表。此方法返回所有仍然存活的引用的列表。