哪個是使用Python內置函數property()的首選方式?作爲裝飾者還是保存到變量?Python的屬性()應該用作裝飾器還是保存到變量?
下面是將property()
保存到變量color
的示例。
class Train(object):
def __init__(self, color='black'):
self._color = color
def get_color(self):
return self._color
def set_color(self, color):
self._color = color
def del_color(self):
del self._color
color = property(get_color, set_color, del_color)
這裏是相同的例子,但使用的裝飾代替。
class Train(object):
def __init__(self, color='black'):
self._color = color
@property
def color(self):
return self._color
@color.setter
def color(self, color):
self._color = color
@color.deleter
def color(self):
del self._color
我發現有些人喜歡用只讀屬性的裝飾器語法。例如。
class Train(object):
def __init__(self, color='black'):
self._color = color
@property
def color(self):
return self._color
但是,保存到變量時也可以實現相同的功能。
對於相同的功能class Train(object):
def __init__(self, color='black'):
self._color = color
def get_color(self):
return self._color
color = property(get_color)
兩種方式讓我很困惑,因爲PEP20聲明
應該有one--和最好只有一個--obvious辦法做到這一點。
我更喜歡裝飾器語法,因爲它不會創建不應該被調用的額外方法(但直接調用'property()'函數)我不確定這是不是官方首選的方法。 – Matt
有兩種方法的原因是,直到Python 2.4才引入裝飾器,所以在這之前,你的第一個例子是唯一的方法。裝飾器允許更多可讀的代碼,但舊的方式仍然是可能的。 –
感謝@Matt解釋說,裝飾器保護方法,使它們不像'Train().color('green')'那樣可調用。我將從現在開始一直使用裝飾器。 :) –