2013-04-11 10 views
2

原諒我,如果「超載」不正確的說法在這裏...引用自我而重載類的方法

我試圖做這樣的事情:

class Length: 

    def __init__(self, length = 0): 
     self._length = length 

    def twice(self, length = self._length): 
     return length*2 

正如你所看到的,我試圖在參數twice()中引用self._length。 Python雖然不喜歡這個。我得到NameError: name 'self' is not defined

有沒有一種很好的方式來指定這樣的默認值,並得到我想要的?

回答

11

您不能將實例屬性用作方法的默認參數。這些方法及其默認參數值是在定義類時定義的,但實例屬性直到後來才存在,當您實例化類時。

你要做的:

def twice(self, length=None): 
    if length is None: 
     length = self._length 
    return length*2 
+0

謝謝!這是有道理的。我希望我不會添加甚至兩行*代碼,但我發現這可能是最好的方法。 – mrKelley 2013-04-11 18:57:19

+0

如果您擔心換行符的保留,您可以使用:'返回長度不是無和長度或self._length'。這將爲我們其他人留下更多的換行信息! – tdelaney 2013-04-11 19:01:55

+1

或者只是使用經典的Mac,並儘自己的本分來控制CR的人口過剩,而不是促成LF的過度捕撈。 – abarnert 2013-04-11 19:14:30