如何在Python跨文件的另一个类中使用实例变量
如何在Python跨文件的类之间传递数据?
嘿,我来帮你搞定这个问题~你现在的核心问题是file1里One类的getData方法中定义的局部变量无法被file2的Two类访问,而且你的file2代码里还有个小错误(把pin_code写成了pin),下面给你两种可行的解决方案:
问题回顾
你的现有代码:
file1.py
class One: def __init__(self): pass def getData(self): username = input("Enter username:") pin_code = input("Enter PIN code:")
file2.py
class Two: def __init__(self): pass def dataFromOtherFile(self): print("username and pin code in file1 was",username , pin)
解决方案1:让getData返回数据
修改One类的getData方法,让它返回获取到的username和pin_code,然后在Two类中实例化One并调用方法拿到数据:
修改后的file1.py
class One: def __init__(self): pass def getData(self): username = input("Enter username:") pin_code = input("Enter PIN code:") return username, pin_code # 返回两个变量的值
修改后的file2.py
# 从file1模块导入One类 from file1 import One class Two: def __init__(self): pass def dataFromOtherFile(self): # 创建One类的实例 one_obj = One() # 调用getData方法获取用户名和PIN码 username, pin_code = one_obj.getData() # 打印数据 print("username and pin code in file1 was", username, pin_code) # 测试代码(可选,用于验证功能) if __name__ == "__main__": two_obj = Two() two_obj.dataFromOtherFile()
解决方案2:将数据设为类的实例属性
把username和pin_code变成One类的实例属性,这样只要One的实例存在,就可以直接访问这些属性:
修改后的file1.py
class One: def __init__(self): # 初始化实例属性 self.username = None self.pin_code = None def getData(self): # 给实例属性赋值 self.username = input("Enter username:") self.pin_code = input("Enter PIN code:")
修改后的file2.py
from file1 import One class Two: def __init__(self): pass def dataFromOtherFile(self): one_obj = One() one_obj.getData() # 先调用方法填充实例属性 # 直接访问实例的属性 print("username and pin code in file1 was", one_obj.username, one_obj.pin_code) # 测试代码 if __name__ == "__main__": two_obj = Two() two_obj.dataFromOtherFile()
两种方案的区别
- 方案1适合只需要一次性获取数据的场景,拿到返回值后可以直接使用;
- 方案2更适合后续还需要多次用到这些数据的场景,只要实例没被销毁,随时可以访问属性。
内容的提问来源于stack exchange,提问作者husnain kazmi
相关产品推荐
相关产品推荐

