2011-09-10 10 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ボックスを開くだろうと思いますか? –

答えて

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を言わせては、これは私の意見では、読みやすいコードになります。

関連する問題