打印类的所有实例

打印类的所有实例,第1张

打印类的所有实例

在这种情况下,我看到两个选择:

垃圾收集器
import gcfor obj in gc.get_objects():    if isinstance(obj, some_class):        dome_something(obj)

这样做的缺点是,当您有很多对象时,它会非常慢,但会与您无法控制的类型一起使用。

使用mixin和weakrefs
from collections import defaultdictimport weakrefclass 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 instclass X(KeepRefs):    def __init__(self, name):        super(X, self).__init__()        self.name = namex = X("x")y = X("y")for r in X.get_instances():    print r.namedel yfor r in X.get_instances():    print r.name

在这种情况下,所有引用都将作为弱引用存储在列表中。如果您经常创建和删除很多实例,则应在迭代后清理弱引用列表,否则会产生很多麻烦。

这种情况下的另一个问题是,您必须确保调用基类的构造函数。您也可以重写

__new__
,但是
__new__
实例化仅使用第一个基类的方法。这也仅适用于您所控制的类型。

编辑 :可以按照特定格式打印所有实例的方法,但实际上,它只是

for
-loops的一种变体。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5643558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存