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

53 投票
4 回答
16795 浏览
提问于 2025-04-17 01:58
def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename)
    ....

在第一行出现了 NameError: name 'self' is not defined 的错误。这看起来是因为 Python 不认识这个 'self'。我该怎么改写代码,才能不让它报错呢?

4 个回答

12
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个变量,我觉得这样会让代码更容易阅读。

14

文档中提到:

默认参数的值是在函数定义被执行时计算的。

这就解释了为什么实例不能被引用。正如其他人所说,使用 None 作为默认值,然后在函数执行时再根据实际情况来设置这个值,当实例可用时再进行调整。

51

使用默认值为 None,然后去检查这个值。

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

撰写回答