如何在另一个模块中获取给定类的所有实例

2024-04-19 21:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我不确定这个问题是否在别处得到了回答,但我找不到任何与此案例具体相关的可行解决方案,因为它们要么是如何访问同一文件中的实例(工作正常),要么是使用reload()(不起作用)

我有两个python文件,module1.py和module2.py。在module1.py中有一个类,它包含一组我需要从module2访问的实例。 在实例化时,我将每个实例附加到一个列表(作为类变量),但在导入module1时,这些实例尚未实例化,因此该列表为空。这意味着我可以在模块1中访问此实例列表,但在模块2中它是空的

模块1.py

class Class1:
  instances = [ ]
  def __init__(self):
    self.instances.append(self)

a = Class1()
b = Class1()
c = Class1()

模块2.py

import module1
def foo():
  print(len(module1.Class1.instances))
  #prints zero, list should not be empty

那么,我如何从module2访问在module1中创建的这些实例呢


Tags: 模块文件instances实例pyself列表def
2条回答

请参见下面的module1.py:

class Class1:
  instances = [ ]
  def __init__(self):
    self.instances.append(self)

cls = Class1()
print(Class1.instances)

只有创建了对象,才会将其添加到实例[]列表中。由于没有创建对象,因此列表为空

在module2.py中:

import module1
def foo():
  print(len(module1.Class1.instances))
foo()

实例列表属于该类,因此需要给出类似module1.Class1.instances

输出如下所示: 运行两个文件后:

[<module1.Class1 object at 0x00000278A447CB70>]
1

您应该做的是调用要导入的类,因此可以使用[*(import all)][1]导入,也可以按如下方式导入特定类:

from module1 import *
def foo():
    return Class1.instances
c = foo()[0]
print(type(c)) # Is of type Module1.Class1

在模块1中:

class Class1:
   instances = []
   def __init__(self):
       self.instances.append(self)


a = Class1()
b = Class1()

现在实例有2个元素,您可以在module2中访问它们

相关问题 更多 >