使用self.*作为方法的默认值

Fra*_*ter 34 python

def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename)
    ....
Run Code Online (Sandbox Code Playgroud)

NameError: name 'self' is not defined在第一行给出.似乎Python不接受它.如何重写代码以免引发异常?

Ign*_*ams 35

使用默认值None并检测它.

def save_file(self, outputfilename=None): 
    if outputfilename is None:
        outputfilename = self.image_filename
    self.file.read(outputfilename)
    ....
Run Code Online (Sandbox Code Playgroud)

  • 这种模式的问题是误导性的. (3认同)

Dav*_*nan 13

文件规定:

执行函数定义时,将评估默认参数值.

这解释了为什么无法引用实例.正如其他人所说的那样,使用None作为默认值,并在实例可用时在函数执行时修复该值.


pet*_*tr0 6

def save_file(self, outputfilename=None): 
    outputfilename = outputfilename or self.image_filename
    self.file.read(outputfilename)
Run Code Online (Sandbox Code Playgroud)

甚至

def save_file(self, outputfilename=None):         
    self.file.read(outputfilename or self.image_filename)
Run Code Online (Sandbox Code Playgroud)

这可能与一个变量无关,但如果你有,比方说,5,这会使代码更容易阅读,在我看来。