Python跨文件不同类传递列表值返回空列表该如何解决
问题原因
你代码的核心问题是每次调用file1.a()都会创建一个全新的a类实例,每个实例的result列表都是独立的,调用方法后该临时实例就被销毁,自然无法持久化存储你添加的值。
修复方案(最常用:复用实例)
第一步:确保全程使用同一个a类实例
你可以选择在b类初始化时传入a的实例,或者直接在b类内部持有全局唯一的a实例,示例代码如下:
修改后的file2.py
import file1 class b: # 初始化时传入a类的实例,避免重复新建 def __init__(self, a_instance): self.a_instance = a_instance def add_value_to_list(self): # 复用传入的实例调用方法,值会存在该实例的result里 self.a_instance.set_result("add_value")
调用示例
import file1 import file2 # 全局只创建一次a类的实例 my_a = file1.a() # 把该实例传给b类 my_b = file2.b(my_a) # 调用添加方法 my_b.add_value_to_list() # 此时打印就能拿到存储的值,输出为 ['add_value'] print(my_a.result)
可选方案:单例模式(适合需要全局唯一共享a实例的场景)
如果你希望整个项目里a类只能有一个实例,所有调用都共享同一个result列表,可以给a类加单例实现:
修改后的file1.py
class a: # 存储单例实例的类属性 _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls, *args, **kwargs) cls._instance.result = [] return cls._instance def set_result(self, result_a): self.result.append(result_a)
这样即使你每次调用file1.a(),拿到的都是同一个实例,原来的file2.py代码不用修改,调用后也能拿到正确的result值。
内容的提问来源于stack exchange,提问作者A..
相关产品推荐
相关产品推荐

