我寫一個類的方法,我想用類變量,如果提供默認爲python類方法中的類變量?
def transform_point(self, x=self.x, y=self.y):
沒有其他的值,但...這似乎並不工作:
NameError: name 'self' is not defined
我感覺有一個更聰明的方法來做到這一點。你會怎麼做?
我寫一個類的方法,我想用類變量,如果提供默認爲python類方法中的類變量?
def transform_point(self, x=self.x, y=self.y):
沒有其他的值,但...這似乎並不工作:
NameError: name 'self' is not defined
我感覺有一個更聰明的方法來做到這一點。你會怎麼做?
您需要使用定點值,然後替換那些具有所需的實例屬性。 None
是一個很好的選擇:
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
注意函數簽名只執行一次;你不能使用表達式作爲默認值,並期望每次調用函數都會改變它們。
如果有能夠設置x
或y
到None
,那麼你需要使用一個不同的,獨特的單值設置爲默認。使用的object()
實例通常在這種情況下,一個偉大的哨兵:
_sentinel = object()
def transform_point(self, x=_sentinel, y=_sentinel):
if x is _sentinel:
x = self.x
if y is _sentinel:
y = self.y
,現在你可以調用.transform_point(None, None)
了。
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
等
請注意,調用'transform_point(obj)'將導致對'transform_point'的所有後續調用對'x'和'y'使用默認的arg'None'。 – mmoore 2013-03-07 12:18:22