当前位置: 首页 > 面试题库 >

打印类的所有实例

阮疏珂
2023-03-14
问题内容

对于Python中的类,如何定义一个函数以函数中定义的格式打印类的每个实例?


问题答案:

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

垃圾收集器

import gc
for obj in gc.get_objects():
    if isinstance(obj, some_class):
        dome_something(obj)

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

使用mixin和weakrefs

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__实例化仅使用第一个基类的方法。这也仅适用于您所控制的类型。

编辑 :可以按照特定格式打印所有实例的方法,但实际上,它只是for-loops的一种变体。



 类似资料:
  • 问题内容: 我有一个动物类,具有几个属性,例如: 我现在想将所有这些属性打印到文本文件中。我现在做的丑陋方式是: 有没有更好的Pythonic方式可以做到这一点? 问题答案: 在这种简单情况下,您可以使用: 如果要将Python对象存储在磁盘上,则应查看一下货架- Python对象持久性 。

  • 问题内容: 我有一堂课,其中包含有关Person的信息,看起来像这样: 我想返回所有变量。我试图使用反射来实现它,如该问题所示,但我无法打印实例变量。 解决此问题的正确方法是什么? 问题答案: 从实现toString:

  • 我们可以用这里所述的算法求有向图中的圈数。我需要理解算法。 (1)最后那句话到底有什么用处?对algo的工作原理进行简短的描述会很有帮助。由于算法基本上是统计从一个节点返回到同一节点的周期数,所以我们可以使用另一个数组,称之为v,并做以下技巧: (2)我不能实现我刚才写的算法。这是主要的问题,但我认为我需要理解上面的(1)来理解打印所有循环的代码。 我了解到互联网上有算法,我正在尝试使用这个算法。

  • 问题内容: 有没有办法打印所有在启动时加载的spring bean?我正在使用Spring 2.0。 问题答案: 是的,联系并致电 您可以通过以下方式获取上下文: 实施 与注射它/ (2.5)之后 用 相关:您还可以通过注册Bean 来检测每个Bean的注册。它将为每个bean通知。

  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。

  • 本文向大家介绍C程序打印所有ASCII值。,包括了C程序打印所有ASCII值。的使用技巧和注意事项,需要的朋友参考一下 问题 打印0到255个字符的美国信息交换标准代码(ASCII)值,而无需将该字符初始化为整数类型变量。只需使用格式说明符。 解决方案 在这里,我们正在编写一个程序,仅打印65到122。 如果要查看所有ASCII值,则在for循环中可以编写如下: 然后,它打印从0到255的所有AS