gpt4 book ai didi

python - 这对于装饰器来说合适吗?

转载 作者:行者123 更新时间:2023-12-01 03:29:13 25 4
gpt4 key购买 nike

我有一堂这样的课:

class MyClass(object):
def __init__(self, name):
self.name = name
self.df = pd.read_table(name)

还有一堆这样的方法:

def valid_cond1(self):
# check if cond1 is satisfied with respect to self.df and return
# a DataFrame of rows not satisfying cond1

def valid_cond2(self):
# same deal

等等。最后,我想获取每个方法的输出,并向客户端返回一个格式化的坏行列表。我可以通过调整实现来为 valid_cond1 执行此操作,如下所示:

def valid_cond1(self):
# err_df = rows of self.df not meeting cond1
bad_lines = []
for ix, val in err_df.iterrows():
bad_lines.append("Error in line %s: %s. Cond1 not met.." % (ix,val))
return bad_lines

但我不想为每个函数编写相同的逻辑(也许它们有很多)。

这是我可以使用装饰器的地方吗?或者还有其他方法可以实现所需的行为吗?

最佳答案

我不会跳到装饰器做这样的事情,但也许是一个更通用的方法

def check_condition(self, condition):
# check the condition
return bad_lines # etc.

def valid_cond1(self):
# define condition_1
return self.check_condition(condition_1)

def valid_cond2(self):
return self.check_condition(condition_2)

如果你不能把条件变成简单的可以通过的东西,你可以这样做,至少可以避免重复错误打印代码:

@staticmethod
def invalid_condition(err_df):
# bad lines stuff here

def valid_cond1(self):
# calculate err_df
if err_df:
return self.invalid_condition(err_df)

编辑:只是为了好玩,装饰器版本。众所周知,我(滥用)使用装饰器,所以我可以理解这种愿望:

from functools import wraps

def print_error_info(func):
@wraps(func)
def wrapped(*args, **kwargs):
err_df = func(*args, **kwargs)
bad_lines = []
for ix, val in err_df.iterrows():
bad_lines.append("Error in line %s: %s. Cond1 not met.." % (ix,val))
return bad_lines
return wrapped

# use
class MyClass:
# *snip*

@print_error_info
def valid_cond1(self):
# whatever you need
return err_df

关于python - 这对于装饰器来说合适吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41127754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com