首页 > 解决方案 > 如何在另一个模块中获取给定类的所有实例

问题描述

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

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

模块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

那么如何从模块2访问在模块1中创建的这些实例呢?

标签: pythonoop

解决方案


你应该做的是调用你正在导入的类,所以要么使用 [* (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 中访问它们


推荐阅读