2014-02-09 52 views
1

我正在嘗試使用實例屬性作爲默認參數。不幸的是,python似乎並不認識「self」變量爲什麼不能使用實例屬性作爲默認參數?

class Example(object): 

    def __init__(self, name): 
     self.bar = "" 

    def foo(self, param=self.bar): 
     print self.bar 

爲什麼python不允許在方法簽名中使用self?此外,任何提示都可以順利實現類似結果,而無需使用自我?

+2

由於實例在創建方法時不存在,因此不存在其屬性。 – bereal

回答

2

兩個原因。首先,因爲self也是一個參數,所以只存在於方法體內,而不存在於函數簽名中。

但其次,更重要的是,函數的默認值在它們被定義的時候被評估,而不是被調用的時候。所以這會引用一個尚未創建的實例。

答案是定義默認值爲None並檢查該方法內的值。

2

self是函數的參數。因此,在輸入函數之前,您不能執行self.something,因爲在輸入函數之前沒有定義self

你可以做到以下幾點:

class Example(object): 
    def __init__(self, name): 
     self.bar = name 

    def foo(self, param=None): 
     if param is None: 
      param = self.bar 
     # do stuff with param, which now defaults to self.bar 
相關問題