gpt4 book ai didi

Python:如何编写所有需要相同条件的方法

转载 作者:行者123 更新时间:2023-11-28 21:56:13 25 4
gpt4 key购买 nike

我有一个 class,它的许多方法都依赖于 class 的另一个特定实例的可能但不确定的存在。这些方法的条件如下:if other_instance return X else return None。事实上,我为每个方法编写了几个相同的 if 语句作为代码的一部分。 (另请注意,由于继承问题,我不能使用自定义 __init__。)除了 None 之外,是否有一种实用或适当的方法来限制这种冗余编码依赖方法如下所示(在大大简化的模型上)?

class QuarterResult(ParentClass):
result = None
prior = None

def get_prior_quarter(self):
# code to find prior_quarter
if prior_quarter:
self.prior = prior_quarter
return prior_quarter

# commence None-ing out unusable methods
# Note: the actual model has 10+ methods which need prior

unusable_methods = ('change_in_results', 'quarterly_return')
for mthd in unusable_methods:
setattr(self, mthd, None)

# assume this method is ALWAYS run first
def calculate_result(self, *args):
# result = some calculation based on the given args
_ = self.get_prior_quarter()
self.result = result

@property
def change_in_results(self):
return self.prior.result - self.result

@property
def quarterly_return(self):
return self.change_in_results / self.prior.results

@property
def real_result(self):
if self.result == 42:
return "You are right: it's 42"
else:
return 'What do I know?'

最佳答案

你可以为此使用自定义装饰器

def dependent(meth):
def depmeth(self, *args, **kwargs):
if self.other_instance:
return meth(self, *args, **kwargs)
else:
return None
return depmeth

那么你的类(class)会变成

class ...:
...
def meth1(self, x):
return "always working"

@dependent
def meth2(self, y):
return "code executed only if other_instance is present"

关于Python:如何编写所有需要相同条件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815281/

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