You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:43:33