1 回答

TA貢獻1784條經驗 獲得超8個贊
這實際上取決于您的總體設計是什么,以及您期望實例在任何給定時間處于什么狀態以及您對它的處理方式(換句話說,屬性本身的存在是否有意義,但是......前者似乎通常更y安全我。你調用并獲得一個值,你不必跟蹤,我是否調用了該方法以及這個或那個屬性處于什么狀態?但請注意,你應該真正在構造函數中定義實例屬性,否則訪問可能不僅令人驚訝,而且是致命的(AttributeError)。
現在,解決上述一些問題并且可能適合您在此處訪問值的操作的簡潔解決方案可能是 property ,它本質上允許您訪問方法返回的值,就好像它是實例屬性一樣:
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或者您可以使用方法裝飾器執行相同的操作:
? ? @property
? ? def y(self):
? ? ? ? return #some code that extracts y info from self.x
如果獲取y
成本昂貴且其值在實例的整個生命周期內不會改變,從 Python 3.8 開始,您還可以使用cached_property
.
添加回答
舉報