1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
這實(shí)際上取決于您的總體設(shè)計(jì)是什么,以及您期望實(shí)例在任何給定時(shí)間處于什么狀態(tài)以及您對(duì)它的處理方式(換句話說(shuō),屬性本身的存在是否有意義,但是......前者似乎通常更y安全我。你調(diào)用并獲得一個(gè)值,你不必跟蹤,我是否調(diào)用了該方法以及這個(gè)或那個(gè)屬性處于什么狀態(tài)?但請(qǐng)注意,你應(yīng)該真正在構(gòu)造函數(shù)中定義實(shí)例屬性,否則訪問可能不僅令人驚訝,而且是致命的(AttributeError)。
現(xiàn)在,解決上述一些問題并且可能適合您在此處訪問值的操作的簡(jiǎn)潔解決方案可能是 property ,它本質(zhì)上允許您訪問方法返回的值,就好像它是實(shí)例屬性一樣:
class foo():
? ? def __init__(self, x):
? ? ? ? self.x = x
? ? def extract_y_info(self):
? ? ? ? return #some code that extracts y info from self.x
? ? y = property(extract_y_info)? ? ?
for f in foo_instances:
? ? print(f"value of f.y = {f.y}")
property或者您可以使用方法裝飾器執(zhí)行相同的操作:
? ? @property
? ? def y(self):
? ? ? ? return #some code that extracts y info from self.x
如果獲取y
成本昂貴且其值在實(shí)例的整個(gè)生命周期內(nèi)不會(huì)改變,從 Python 3.8 開始,您還可以使用cached_property
.
添加回答
舉報(bào)