栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

打印类的所有实例

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

打印类的所有实例

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

垃圾收集器

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的一种变体。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号