gpt4 book ai didi

python - 打印一个类的所有实例

转载 作者:IT老高 更新时间:2023-10-28 20:26:56 32 4
gpt4 key购买 nike

对于 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-循环的一种变体。

关于python - 打印一个类的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328851/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com