Python类脚本main函数用法及跨文件调用数据加载问题求助
问题原因与修正方案
问题根源
你在main.py里只是实例化了Preprocess类,但没有调用run()方法,也没有保存实例引用。Preprocess类的load_data()方法只会在run()被调用时才执行,所以直接实例化后,self.data和self.data_ops还是初始的None,自然拿不到目标DataFrame。
修正后的main.py
import dataload def main(): # 1. 创建类实例并保存引用,后续才能访问实例内的属性 preprocessor = dataload.Preprocess() # 2. 调用run()方法触发数据加载逻辑 preprocessor.run() # 现在可以正常访问加载后的DataFrame print(preprocessor.data.head()) print(preprocessor.data_ops.head()) if __name__ == "__main__": main()
关于dataload.py里的main函数
这个函数的作用是当直接运行dataload.py脚本时,自动执行数据加载逻辑,方便你单独测试这个类的功能。比如在终端执行python dataload.py,if __name__ == "__main__"会触发main函数,实例化类并调用run(),不用依赖main.py就能验证类是否正常工作。
额外优化提示
如果你希望实例化类时自动完成数据加载,可以把self.run()放到__init__方法里:
class Preprocess: def __init__(self): self.data = None self.data_ops = None self.run() # 实例化时自动触发数据加载 def load_data(self): # 原加载逻辑不变 data_dir = os.path.join('...') imo_data = os.path.join("...") self.data = pd.read_csv(os.path.join(imo_data,"file1.csv"), low_memory=False) self.data_ops = pd.read_csv(os.path.join(data_dir,"file2.csv"),sep=";") def run(self): self.load_data()
这样main.py里只需要实例化就能拿到数据:
preprocessor = dataload.Preprocess()
不过这种方式灵活性稍差,适合初始化逻辑固定的场景。
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

