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