python 使用self.* 作为方法的默认值[重复]

rur96b6h  于 2023-03-28  发布在  Python
关注(0)|答案(4)|浏览(155)

此问题在此处已有答案

How can I avoid issues caused by Python's early-bound default parameters (e.g. mutable default arguments "remembering" old data)?(10个答案)
5年前关闭.

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

在第一行给出了NameError: name 'self' is not defined。看起来Python不接受它。我如何重写代码,使它不会引发异常?

5m1hhzi4

5m1hhzi41#

使用默认值None并检测它。

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

gcuhipw92#

documentation声明:
执行函数定义时计算默认参数值。
这就解释了为什么示例不能被引用。正如其他人所说,使用None作为默认值,并在示例可用时在函数执行时修复值。

jtoj6r0c

jtoj6r0c3#

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个变量,在我看来,这会使代码更容易阅读。

2mbi3lxu

2mbi3lxu4#

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

相关问题