gpt4 book ai didi

"derived fields"/"class attributes from calculations"的 Python 范例

转载 作者:太空狗 更新时间:2023-10-30 02:23:05 28 4
gpt4 key购买 nike

我有一个类,比方说,它计算一个人的保险风险,并且在计算过程中计算了一些其他变量。稍后我需要访问风险和其他变量。

class InsuranceRiskModel:

self.risk = None
self.other_var = None
...

def get_risk():
# do a bunch of calculations,
# which in the meantime fills out a bunch of other vars
self.other_var = 5
self.risk = 6
return self.risk

def get_other_var():
# risk hasn't been calculated
if not self.risk:
raise NotYetCalculatedError("Not yet calculated!")
return self.other_var

现在在我做的其他一些功能中:

r = InsuranceRiskModel(person)
risk = r.get_risk()
other_var = r.get_other_var()

对于我想要的那种程序来说,这是一个合法的结构吗?只是抛出计算未运行的异常,以防止获得虚假值?

最佳答案

不,在任何程序中引发 NotYetCalculatedError 都是不合法的(除非计算需要数小时的工作)。

get_other_var() 应该自动计算风险

您真正想要做的是在您初始化类时运行所有计算,或者如果您不能这样做,您将想要这样做:

class InsuranceRiskModel(object):
def __init__(self, person):
self.person = person
self.calculated = False

def calculateModel(self):
if not self.calculated:
self.risk = 6
self.other_var = 5
self.calculated = True

@property
def risk(self):
self.calculateModel()
return self.risk

@property
def other_var(self):
self.calculateModel()
return self.other_var

然后您可以随时访问 InsuranceRiskModel(bob).riskInsuranceRiskModel(bob).other_var 并且计算将透明地完成。

为了回答您更笼统的问题,“[由] 存储计算表示的类属性的 Python 范例”是类属性抽象,涉及透明的用户定义的 getter、setter 和删除器,如上所示;更多信息在这里http://docs.python.org/library/functions.html#property

关于 "derived fields"/"class attributes from calculations"的 Python 范例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451034/

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