2011-09-10 62 views
24
def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename) 
    .... 

在第一行給出了NameError: name 'self' is not defined。看來,Python不接受它。我該如何重寫代碼,以免引發異常?使用self。*作爲方法的默認值

+0

函數定義發生在不同的範圍和不同的時間。 –

+0

如果確實有效,那肯定會很好。使代碼更清潔。我猜這會打開一些其他的Pandoran Box來實現? –

回答

25

使用默認值None並檢測該值。

def save_file(self, outputfilename=None): 
    if outputfilename is None: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
+2

這種模式的問題,其誤導。 – Nikolai

3
def save_file(self, outputfilename = None): 
    if not outputfilename: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
11

documentation狀態:在執行函數定義時

默認參數值進行了評價。

這解釋了爲什麼無法引用該實例。正如其他人所說的,使用None作爲默認值,並在實例可用時修正函數執行時的值。

2
def save_file(self, outputfilename=None): 
    outputfilename = outputfilename or self.image_filename 
    self.file.read(outputfilename) 

甚至

def save_file(self, outputfilename=None):   
    self.file.read(outputfilename or self.image_filename) 

這可能是沒什麼用一個變量,但如果你有,比方說,5,這使得代碼更易於閱讀,在我看來。