假设我有一个数据分析类。每个实例都执行一些数据分析工作,并将结果(“因素”)作为csv文件输出到指定的目录中。我用于获取结果的所有函数都命名为get_factor_name
,因此我想编写一个装饰器,该装饰器可以将任何此类函数的结果自动输出到csv文件。这是我的最小示例:
import pandas as pd
import functools
class DataAnalyser:
def __init__(self):
self.input_df = ... # some pandas df
self.output_dir = 'some_dir/'
def write_to_csv(self, func):
@functools.wraps(func)
def f(*args, **kwargs):
# t = time.time()
res = func(*args, **kwargs)
if self.to_csv:
# fac name is what follows "get_" in the func name
fac_name = func.__name__[4:]
res.to_csv(self.output_dir+fac_name+'.csv', )
return res
return f
@write_to_csv
def get_factor1(self):
# do sth and get results
df_ = ...
return df_
data_analyser = DataAnalyser()
data_analyser.get_factor1()
但是口译员抱怨
TypeError: write_to_csv() missing 1 required positional argument: 'func'
我认为该错误可能是由于使用了一个实例方法(即在类中使用self
arg的实例方法)引起的,该实例方法的行为可能与“常规”修饰符不同。无论如何,如何实现可以传递self
的修饰器?