【发布时间】:2019-12-20 06:07:57
【问题描述】:
我试图在类初始化时返回一个数据帧(这是一个连接两个数据帧的函数的结果)。由于我不能直接在 init 上使用装饰器,我必须在单独的方法上调用装饰器并将其传递给 init。
不幸的是,当我实例化类时,没有返回所需的结果数据帧?
我已经尝试使用 functools 'wraps' 包装函数,但我仍然没有得到想要的结果,尽管没有抛出错误
from functools import wraps
# the decorator function
def join_results(func):
@wraps(func)
def join_df_wrapper(*args, **kwargs):
close_df.columns = map(str.lower, close_df.columns)
close_df.set_index(pd.to_datetime(close_df.dates))
model_preds_df.columns = map(str.lower, model_preds_df.columns)
model_preds_df.set_index(pd.to_datetime(model_preds_df.dates))
return func(*args, **kwargs)
class BackTestModelPNL(object):
"""test decorator"""
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
# call decorator
@join_results
def return_init_df(self, *args, **kwargs):
return self
# test that the class inits and returns joined results dataframe
df = BackTestModel(close_df, model_preds_df)
类的调用没有错误,但实例化类时未返回所需的结果(连接的数据帧)
【问题讨论】:
-
“我试图在类初始化时返回一个数据框”你能澄清你的用例吗?类应该在初始化时提供实例。如果你想返回别的东西,为什么不使用常规函数呢?
-
目的是加入单独的数据帧以执行一系列检查。该类旨在执行这些检查,但也预先以静默方式加入两个不同的框架。
标签: python pandas python-decorators