Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在_uinit__()上调用修饰类方法_Python_Pandas_Python Decorators - Fatal编程技术网

Python 在_uinit__()上调用修饰类方法

Python 在_uinit__()上调用修饰类方法,python,pandas,python-decorators,Python,Pandas,Python Decorators,我试图在类初始化时返回一个数据帧(这是连接两个数据帧的函数的结果)。因为我不能直接在init上使用decorator,所以我必须在单独的方法上调用decorator并将其传递给init 不幸的是,在实例化该类时没有返回所需的结果数据帧 我尝试过使用functools“wrapps”包装函数,但是仍然没有得到预期的结果,尽管没有抛出错误 从functools导入包装 #装饰功能 def join_结果(func): @包装(func) def join_df_包装(*args,**kwargs):

我试图在类初始化时返回一个数据帧(这是连接两个数据帧的函数的结果)。因为我不能直接在init上使用decorator,所以我必须在单独的方法上调用decorator并将其传递给init

不幸的是,在实例化该类时没有返回所需的结果数据帧

我尝试过使用functools“wrapps”包装函数,但是仍然没有得到预期的结果,尽管没有抛出错误

从functools导入包装
#装饰功能
def join_结果(func):
@包装(func)
def join_df_包装(*args,**kwargs):
close_df.columns=map(str.lower,close_df.columns)
关闭日期设置索引(pd到日期时间(关闭日期))
model_preds_df.columns=map(str.lower,model_preds_df.columns)
模型预测数据集索引(pd.to\U日期时间(模型预测数据日期))
返回函数(*args,**kwargs)
类BackTestModelPNL(对象):
“测试装饰程序”
def uuu init uuuu(self,close_df:pd.DataFrame,model_preds_df:pd.DataFrame):
self.close\u df=close\u df
self.model_preds_df=model_preds_df
self.\u initial\u df=self.return\u init\u df()
@财产
def初始_df(自身):
返回自我。\u初始值\u df
#呼叫装饰师
@加入结果
def return_init_df(自身、*args、**kwargs):
回归自我
#测试类是否初始化并返回联接结果dataframe
df=BackTestModel(close\u df,model\u preds\u df)
调用该类时没有错误,但在实例化该类时不会返回所需的结果(联接的数据帧)

\uuuuu init\uuuu()
应始终不返回任何结果

因为new()和init()在构建对象时协同工作 (new()创建它,而init()自定义它),无非无 值可以通过init()返回;这样做将导致类型错误 在运行时引发

您可以使用属性来实现这一点,这是一种更具python风格的方式。
return\u init\u df()
函数可以计算初始数据帧

# Define class 
class BackTestModel(object):
  def __init__(self, close_df: pd.DataFrame, model_preds_df: pd.DataFrame):
    self.close_df = close_df
    self.model_preds_df = model_preds_df
    self._initial_df = self.return_init_df()

  @property
  def initial_df(self):
    return self._initial_df


# test that the class inits and returns joined results dataframe
df = BackTestModel(close_df, model_preds_df)
inital_df = df.initial_df
\uuuu init\uuuu()
应始终返回None

因为new()和init()在构建对象时协同工作 (new()创建它,而init()自定义它),无非无 值可以通过init()返回;这样做将导致类型错误 在运行时引发

您可以使用属性来实现这一点,这是一种更具python风格的方式。
return\u init\u df()
函数可以计算初始数据帧

# Define class 
class BackTestModel(object):
  def __init__(self, close_df: pd.DataFrame, model_preds_df: pd.DataFrame):
    self.close_df = close_df
    self.model_preds_df = model_preds_df
    self._initial_df = self.return_init_df()

  @property
  def initial_df(self):
    return self._initial_df


# test that the class inits and returns joined results dataframe
df = BackTestModel(close_df, model_preds_df)
inital_df = df.initial_df

谢谢你的帮助!你能解释一下属性装饰器是如何与@join\u结果装饰器集成的吗?您的意思是,初始df方法将是我定义join_results逻辑的地方吗?谢谢逻辑可以在“return_init_df()”中,它可以返回或设置_inital_df。该属性就像一个访问_inital_dfI的getter,我已经调整了原始代码以实现您的解决方案,请您看看这是否是您作为实现的意思?不幸的是,我仍然没有在init上获得df?非常感谢你的帮助,非常感谢你的帮助!你能解释一下属性装饰器是如何与@join\u结果装饰器集成的吗?您的意思是,初始df方法将是我定义join_results逻辑的地方吗?谢谢逻辑可以在“return_init_df()”中,它可以返回或设置_inital_df。该属性就像一个访问_inital_dfI的getter,我已经调整了原始代码以实现您的解决方案,请您看看这是否是您作为实现的意思?不幸的是,我仍然没有在init上获得df?非常感谢您的帮助,非常感谢“我正在尝试在初始化类时返回一个数据帧”,您能澄清一下您的用例吗?类应该在初始化时提供实例。如果您想返回其他内容,为什么不使用常规函数呢?其目的是连接不同的数据帧以执行一系列检查。该类的目的是执行这些检查,但也要事先将两个不同的帧以静默方式连接起来。“我试图在初始化类时返回一个数据帧”您能澄清一下您的用例吗?类应该在初始化时提供实例。如果您想返回其他内容,为什么不使用常规函数呢?其目的是连接不同的数据帧以执行一系列检查。该类的目的是执行这些检查,但也要事先以静默方式连接两个不同的帧。