如何在其他类中扩展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
相关产品推荐
相关产品推荐

