【问题标题】:Using self.* as default value for a method [duplicate]使用 self.* 作为方法的默认值 [重复]
【发布时间】:2011-09-10 10:59:53
【问题描述】:
def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename)
    ....

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

【问题讨论】:

  • 函数定义发生在不同的作用域和不同的时间。
  • 如果它确实有效,那就太好了。使代码更干净。我猜它会打开其他一些潘多拉盒子来实现?

标签: python


【解决方案1】:

使用默认值None 并检测它。

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

【讨论】:

  • 这种模式的问题在于它的误导性。
【解决方案2】:

documentation 声明:

在执行函数定义时评估默认参数值。

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

【讨论】:

    【解决方案3】:
    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,我认为这会使代码更易于阅读。

    【讨论】:

    • 这应该是公认的答案,因为它比当前的答案不那么冗长并且做同样的事情。
    【解决方案4】:
    def save_file(self, outputfilename = None):
        if not outputfilename:
            outputfilename = self.image_filename 
        self.file.read(outputfilename)
        ....
    

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多