def save_file(self, outputfilename = self.image_filename):
self.file.read(outputfilename)
....
は、最初の行にNameError: name 'self' is not defined
と表示されます。 Pythonはそれを受け入れていないようです。例外を発生させないようにコードを書き直すにはどうすればよいですか?メソッドのデフォルト値としてself。*を使用する
def save_file(self, outputfilename = self.image_filename):
self.file.read(outputfilename)
....
は、最初の行にNameError: name 'self' is not defined
と表示されます。 Pythonはそれを受け入れていないようです。例外を発生させないようにコードを書き直すにはどうすればよいですか?メソッドのデフォルト値としてself。*を使用する
デフォルトを使用してNone
を検出します。
def save_file(self, outputfilename=None):
if outputfilename is None:
outputfilename = self.image_filename
self.file.read(outputfilename)
....
誤解を招くこのパターンの問題。 – Nikolai
def save_file(self, outputfilename = None):
if not outputfilename:
outputfilename = self.image_filename
self.file.read(outputfilename)
....
関数定義が実行されたときにデフォルトのパラメータ値が評価されています。
これは、インスタンスを参照できない理由を説明しています。他の人が言っているように、デフォルトとしてNoneを使用し、インスタンスが利用可能になったら関数実行時に値を修正します。
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を言わせては、これは私の意見では、読みやすいコードになります。
関数の定義は、異なるスコープと異なる時間に行われます。 –
それがうまくいけば確かにいいですね。コードをもっときれいにします。私はそれが実装するいくつかの他のPandoranボックスを開くだろうと思いますか? –