如何从另一个Python模块获取预测值?代码调用异常求助
问题解决:无法获取CalcSales类的预测结果
问题场景
有两个Python文件file_calling_class.py和file_with_class.py,前者需要获取后者CalcSales类中calculate_sales方法生成的prediction值。单独运行calculate_sales方法时结果正常,但跨文件传递budget值后,输出始终是self.prediction的初始值0。
用户代码
file_calling_class.py
import file_with_class budget = 100 sales = file_with_class.CalcSales(budget=budget).__str__() print('Your sales are: ' +sales)
file_with_class.py
import pickle import pandas as pd class CalcSales(): def __init__(self, budget: int): self.budget = budget self.sales = 0 self.prediction = 0 def calculate_sales(self): #budget = request.args.get('budget') print(self.budget) budget = [int(self.budget)] df = pd.DataFrame(budget, columns=['Marketing Budget']) model = pickle.load(open('simple_linear_regression.pkl', 'rb')) prediction = model.predict(df) self.prediction = int(prediction[0]) # return(self.prediction) def __str__ (self): return (str(self.prediction))
输出结果
Your sales are: 0
原因分析
核心问题是:创建CalcSales实例后,从未调用过calculate_sales方法,self.prediction一直停留在__init__方法中初始化的0值,完全没有执行预测逻辑。
修复方案
提供两种可行的修复方式,根据实际需求选择:
方式一:手动调用预测方法(推荐,更灵活)
修改file_calling_class.py,先创建实例,再调用calculate_sales执行预测,最后输出结果:
import file_with_class budget = 100 # 创建实例 sales_obj = file_with_class.CalcSales(budget=budget) # 执行预测逻辑 sales_obj.calculate_sales() # 输出结果 print('Your sales are: ' + str(sales_obj))
方式二:初始化时自动执行预测
修改file_with_class.py的__init__方法,在实例创建时自动调用calculate_sales,适合不需要延迟计算的场景:
import pickle import pandas as pd class CalcSales(): def __init__(self, budget: int): self.budget = budget self.sales = 0 self.prediction = 0 # 初始化时自动执行预测 self.calculate_sales() def calculate_sales(self): print(self.budget) budget = [int(self.budget)] df = pd.DataFrame(budget, columns=['Marketing Budget']) model = pickle.load(open('simple_linear_regression.pkl', 'rb')) prediction = model.predict(df) self.prediction = int(prediction[0]) def __str__ (self): return str(self.prediction)
验证结果
修改后运行file_calling_class.py,即可输出calculate_sales方法生成的正确预测值,而非初始的0。
内容的提问来源于stack exchange,提问作者Wupppa
相关产品推荐
相关产品推荐

