对于Python中的类,如何定义一个函数以函数中定义的格式打印类的每个实例?
在这种情况下,我看到两个选择:
import gc for obj in gc.get_objects(): if isinstance(obj, some_class): dome_something(obj)
这样做的缺点是,当您有很多对象时,它会非常慢,但会与您无法控制的类型一起使用。
from collections import defaultdict import weakref class KeepRefs(object): __refs__ = defaultdict(list) def __init__(self): self.__refs__[self.__class__].append(weakref.ref(self)) @classmethod def get_instances(cls): for inst_ref in cls.__refs__[cls]: inst = inst_ref() if inst is not None: yield inst class X(KeepRefs): def __init__(self, name): super(X, self).__init__() self.name = name x = X("x") y = X("y") for r in X.get_instances(): print r.name del y for r in X.get_instances(): print r.name
在这种情况下,所有引用都将作为弱引用存储在列表中。如果您经常创建和删除很多实例,则应在迭代后清理弱引用列表,否则会产生很多麻烦。
这种情况下的另一个问题是,您必须确保调用基类的构造函数。您也可以重写__new__,但是__new__实例化仅使用第一个基类的方法。这也仅适用于您所控制的类型。
__new__
编辑 :可以按照特定格式打印所有实例的方法,但实际上,它只是for-loops的一种变体。
for