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

如何在其他类中扩展Python已有staticmethod静态方法添加额外计算逻辑

实现方案

首先修正原有代码的错误

你提供的第一个类的静态方法存在定义问题:@staticmethod 装饰的静态方法不需要传入self参数,这是你后续传参异常的核心诱因之一,修正后的第一个类方法如下:

import pandas as pd
import numpy as np

class FirstClass:
    @staticmethod
    def calculateStatisticalFeatures(inputData) -> pd.DataFrame:
        # 原有计算逻辑
        skewn, kurt, entropyVal, meanCalc = 0,0,0,0 # 替换为你的实际计算逻辑
        features = pd.DataFrame(np.array([[skewn, kurt, entropyVal, meanCalc]]), columns=['skewness', 'kurtosis','entropy', 'meanCalc'])
        return features

方案1:直接调用复用(最推荐,无需装饰器)

这种方案逻辑最直观,参数传递无额外隐式逻辑,维护成本最低:

class SecondClass:
    def __init__(self, inputData):
        self.inputData = inputData

    def calculateExtendedFeatures(self) -> pd.DataFrame:
        # 复用第一个类的全部计算逻辑
        base_res = FirstClass.calculateStatisticalFeatures(self.inputData)
        # 新增额外计算步骤,示例为新增标准差列
        base_res['std_value'] = np.std(self.inputData)
        return base_res

调用示例:

test_data = np.random.rand(100)
second_cls = SecondClass(test_data)
res = second_cls.calculateExtendedFeatures()

方案2:装饰器实现(适合批量扩展多方法的场景)

你之前的装饰器写法错误原因:类定义阶段self还未实例化,无法直接在装饰器参数位置读取self.inputData属性。正确的装饰器实现如下:

# 定义扩展计算的装饰器
def add_extra_calc(origin_func):
    def wrapper(self, *args, **kwargs):
        # 先执行原方法拿到基础结果
        base_res = origin_func(self, *args, **kwargs)
        # 新增额外计算逻辑
        base_res['std_value'] = np.std(self.inputData)
        return base_res
    return wrapper

class SecondClass:
    def __init__(self, inputData):
        self.inputData = inputData
    
    @add_extra_calc
    def calculateFeatures(self):
        # 调用第一个类的静态方法返回基础结果
        return FirstClass.calculateStatisticalFeatures(self.inputData)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:03