Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在另一个模块中获取给定类的所有实例_Python_Oop - Fatal编程技术网

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

Python 如何在另一个模块中获取给定类的所有实例,python,oop,Python,Oop,因此,我不确定这个问题是否在别处得到了回答,但我找不到任何与此案例具体相关的可行解决方案,因为它们要么是如何访问同一文件中的实例(工作正常),要么是使用reload()(不起作用) 我有两个python文件,module1.py和module2.py。在module1.py中有一个类,它包含一组我需要从module2访问的实例。 在实例化时,我将每个实例附加到一个列表(作为类变量),但在导入module1时,这些实例尚未实例化,因此该列表为空。这意味着我可以在模块1中访问此实例列表,但在模块2中

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

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

您应该做的是调用您要导入的类,因此可以使用[*(导入所有)][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中访问它们,您应该做的是调用您要导入的类,因此可以使用[*(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中访问它们参见下面的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
[]
1.

请参见下面的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
[]
1.


显示的代码实际上应该失败。使用
module1.Class1.instances
。此外,代码中没有显示实例创建的位置。@Thierrylahuille实例是在module1中创建的。我不认为是这样relevant@OmGal这是绝对相关的,因为现在,没有任何证据表明您正在创建任何实例,一个完全合理的答案是您得到了正确的输出,因为列表确实是空的。请提供一个示例。您使用的是什么版本的python?如果您在上面的代码中调用module2中的foo(),它可以正常工作。Py 3.8.2显示的代码实际上应该失败。使用
module1.Class1.instances
。此外,代码中没有显示实例创建的位置。@Thierrylahuille实例是在module1中创建的。我不认为是这样relevant@OmGal这是绝对相关的,因为现在,没有任何证据表明您正在创建任何实例,一个完全合理的答案是您得到了正确的输出,因为列表确实是空的。请提供一个示例。您使用的是什么版本的python?如果您在上面的代码中调用module2中的foo(),它可以正常工作。Py 3.8。2@OmGal您的问题不可理解,您需要创建一个foo()实例来打印ClassMy bad的实例,我忘了在帖子中包含创建实例的内容。@OmGal它对我很好,对您也有效吗?可能是因为你的程序比较大,所以我不知道为什么它对你不起作用,它是一个有效的python代码。看起来应该可以,但我还是得到了一个空的list@OmGal您的问题不可理解,您需要创建一个foo()实例来打印ClassMy bad的实例,我忘了在帖子中包含创建实例的内容。@OmGal它对我来说很好,对你也一样吗?可能是因为你的程序比较大,所以我不知道为什么它对你不起作用,它是一个有效的python代码。看起来应该可以,但我还是得到了一个空列表