python - 如何用另一个实例方法装饰一个实例方法?
问题描述
假设我有一个数据分析课程。每个实例都执行一些数据分析工作,并将结果(“因素”)作为 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
给的装饰器?
解决方案
推荐阅读
- python - 从 webscraper 清理数据
- flutter - 更改订单后将项目保留在可重新排序列表中的最佳做法是什么
- python - 将元组列表保存到文件中并作为列表再次读取
- amazon-web-services - 来自 EC2 的 AWS 中的 DNS 解析
- assembly - 如果为正则设置字节
- r - 在与 emmeans 交互中绘制缺少类别的结果
- python - 字符串索引超出范围 - 即使使用 * 1000 追加和初始化 - Python
- python - Django:无法分配字符串:类必须是类实例
- xcode12 - Xcode 12中的调试视图层次结构按钮在哪里
- node.js - express-subdomain 不解析任何子域