[英]What's the best approach to defer class attribute initialization?
我有以下 OO 用例:
class SomeClass(object):
def __init__(self, arg1):
self.attr_now = arg1
self.attr_later = None
def compute(self):
# do some lengthy computation ...
self.attr_later = x # some result
# continue work ...
這是延遲屬性attr_later
初始化的理想方法還是有更好的方法? 我看到的是attr_later
的類型不安全,因為它可能會在封閉實例的生命周期內改變類型......
由於您在談論 OO 用例,因此我認為您必須了解可以執行哪些訪問修改來保護屬性的值和類型。
想想這個
class SomeClass(object):
def __init__(self, arg1):
self.__attr_now = arg1
self.__attr_later = None
@property
def attr_later(self):
return self.__attr_later
def compute(self):
# do some lengthy computation ...
self.__attr_later = x # some result
# continue work ...
實例變量可以以__
為前綴,以使其成為該實例的私有變量。 所以你可以肯定,變量不能從外部改變。 此外,為變量創建一個property
,以便您可以從外部訪問該值。
如果您認為,您想從外部設置值,定義一個setter
並控制傳入的分配 - 類似於
@attr_later.setter
def attr_later(self, attr_val):
if isinstance(attr_val,str):
self.__attr_later = attr_val
else:
raise
# or do damage control
如果您正確封裝了屬性,您就可以控制您的實例。 希望這是有道理的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.