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

如何在自定义Python类中存储方法运行结果?类比sklearn Estimator

如何在自定义Python类中实现类似sklearn Estimator的结果存储机制?

在sklearn中,调用LinearRegression这类Estimator实例的fit方法时,训练结果会直接存储在该实例内部,后续无需创建新对象就能调用predict等方法使用这些结果。那要怎么在自定义Python类里实现类似机制,把run_model方法的运行结果存储在类实例中?

sklearn示例代码:

lr = LinearRegression()
lr.fit(X_train, y_train)

你提供的自定义类代码:

import pandas as pd

data = pd.DataFrame({'n':[1,1,4,1],
                    'target':[36,8,0,41],
                    'string':['z', 's', 'd', 'h']})

class test:
    
    def __init__(self,
                 dataframe,
                 target,
                 features):
        
        self.dataframe=dataframe
        self.target = target
        self.features = features
    
    def x_y(self):
        X=self.dataframe[self.features]
        y=self.dataframe[[self.target]]
        
        return X, y 
    
    def run_model(self):
        X, y = self.x_y()
        list_result = X.n*4
        return list_result
        

a = test(dataframe=data, target='target', features=['n','string'])     
a.run_model()

输出:

0     4
1     4
2    16
3     4
Name: n, dtype: int64

实现方法

核心逻辑是在方法内部将计算结果赋值给实例的属性(用self.属性名的形式存储),和sklearn把训练参数存在self.coef_、self.intercept_这类实例属性的思路一致。

修改后的完整代码

import pandas as pd

data = pd.DataFrame({'n':[1,1,4,1],
                    'target':[36,8,0,41],
                    'string':['z', 's', 'd', 'h']})

class test:
    
    def __init__(self,
                 dataframe,
                 target,
                 features):
        
        self.dataframe=dataframe
        self.target = target
        self.features = features
        # 提前初始化结果属性,让类结构更清晰
        self.result_ = None
    
    def x_y(self):
        X=self.dataframe[self.features]
        y=self.dataframe[[self.target]]
        
        return X, y 
    
    def run_model(self):
        X, y = self.x_y()
        list_result = X.n*4
        # 将结果绑定到实例属性中
        self.result_ = list_result
        # 保留返回结果,不破坏原有调用习惯
        return list_result
        

a = test(dataframe=data, target='target', features=['n','string'])     
a.run_model()
# 直接通过实例属性获取结果,无需重复执行计算
print(a.result_)

关键说明

  1. 提前初始化属性:在__init__方法里声明self.result_ = None,既明确类的结构,也能避免后续未调用run_model就访问结果时出现属性未定义的报错。
  2. 存储结果到实例:在run_model中计算出结果后,用self.result_ = list_result把结果绑定到实例上,这里用下划线结尾命名是遵循sklearn的惯例(标识该属性是拟合/计算后生成的)。
  3. 复用结果:后续直接通过a.result_就能获取结果,不需要重复调用run_model执行计算,节省资源。

扩展:类似predict的方法

如果需要像sklearn那样封装结果获取逻辑,可以新增一个方法:

def get_result(self):
    if self.result_ is None:
        raise ValueError("请先调用run_model方法生成结果")
    return self.result_

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:03