如何在python中获取某个类的所有实例?

Nat*_*tal 2 python class

有人问了一个类似的[问题]:打印一个类的所有实例。虽然我不太关心打印它们,但我更想知道当前“活动”的实例有多少。这种实例捕获的原因更像是设置计划作业,每小时检查这些“实时”未处理的实例并丰富数据。之后,要么设置此实例中的标志,要么删除此实例。Torsten Marek 在 [问题] 中的回答:使用weakrefs打印类的所有实例需要为这种类型的每个类调用基类构造函数,是否可以自动执行此操作?或者我们可以使用其他方法获取所有实例?

kin*_*all 6

您可以自己跟踪它(请参阅其他答案)或询问垃圾收集器:

import gc

class Foo(object):
   pass

foo1, foo2 = Foo(), Foo()

foocount = sum(1 for o in gc.get_referrers(Foo) if o.__class__ is Foo)
Run Code Online (Sandbox Code Playgroud)

如果您有很多对象,这可能会有点慢,但通常不会太糟糕,而且它的优点是您可以轻松地将其与其他人的代码一起使用。

注意:使用o.__class__而不是type(o)所以它适用于旧式类。