如何在Python中获取给定类的所有实例列表?
使用gc或weakref模块可以获取给定类的所有实例列表。首先,我们将使用pip安装gc模块 −
pip install gc
要使用gc模块,请使用import −
import gc
使用gc模块获取类的实例
在此示例中,我们创建了一个名为Demo的类,并有四个实例 −
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()
ob4 = Demo()
我们遍历内存中的对象 −
for ob in gc.get_objects():
示例
使用isinstance()函数,检查每个对象是否是Demo类的实例。让我们看看完整的示例 −
import gc
# 创建一个类
class Demo:
pass
# 四个对象
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()
ob4 = Demo()
# 显示给定类的所有实例
for ob in gc.get_objects():
if isinstance(ob, Demo):
print(ob)
输出
<__main__.Demo object at 0x000001E0A407FC10>
<__main__.Demo object at 0x000001E0A407EBC0>
<__main__.Demo object at 0x000001E0A407EBF0>
<__main__.Demo object at 0x000001E0A407EC20>
使用gc模块显示类的实例计数
示例
在此示例中,我们将计算并显示实例的计数 −
import gc
# 创建一个类
class Demo(object):
pass
# 创建4个对象
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()
ob4 = Demo()
# 计算并显示实例的计数
res = sum(1 for k in gc.get_referrers(Demo) if k.__class__ is Demo)
print("实例计数 = ",res)
输出
实例计数 = 4
使用weakref模块显示类的实例
也可以使用weakref模块获取类的实例。首先,我们将使用pip安装weakref模块 −
pip install weakref
要使用gc模块,请使用import −
import weakref
示例
现在让我们看一个例子 −
import weakref
# 创建Demo()函数
class Demo:
instanceArr = []
def __init__(self, name=None):
self.__class__.instanceArr.append(weakref.proxy(self))
self.name = name
# 创建3个对象
ob1 = Demo('ob1')
ob2 = Demo('ob2')
ob3 = Demo('ob3')
# 显示实例
for i in Demo.instanceArr:
print(i.name)
输出
ob1
ob2
ob3