Python 在_uinit__()上调用修饰类方法
我试图在类初始化时返回一个数据帧(这是连接两个数据帧的函数的结果)。因为我不能直接在init上使用decorator,所以我必须在单独的方法上调用decorator并将其传递给init 不幸的是,在实例化该类时没有返回所需的结果数据帧 我尝试过使用functools“wrapps”包装函数,但是仍然没有得到预期的结果,尽管没有抛出错误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):
从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?非常感谢您的帮助,非常感谢“我正在尝试在初始化类时返回一个数据帧”,您能澄清一下您的用例吗?类应该在初始化时提供实例。如果您想返回其他内容,为什么不使用常规函数呢?其目的是连接不同的数据帧以执行一系列检查。该类的目的是执行这些检查,但也要事先将两个不同的帧以静默方式连接起来。“我试图在初始化类时返回一个数据帧”您能澄清一下您的用例吗?类应该在初始化时提供实例。如果您想返回其他内容,为什么不使用常规函数呢?其目的是连接不同的数据帧以执行一系列检查。该类的目的是执行这些检查,但也要事先以静默方式连接两个不同的帧。