【问题标题】:Why can one not use an instance attribute as a default parameter? [duplicate]为什么不能使用实例属性作为默认参数? [复制]
【发布时间】:2014-02-09 20:45:49
【问题描述】:

我正在尝试使用实例属性作为默认参数。不幸的是,python 似乎无法识别“self”变量

class Example(object):

    def __init__(self, name):
        self.bar = ""

    def foo(self, param=self.bar):
        print self.bar

为什么python不允许在方法签名中使用self?另外,有什么技巧可以在不使用 self 的情况下实现类似的结果吗?

【问题讨论】:

  • 因为方法创建时实例不存在,所以不存在其属性。

标签: python


【解决方案1】:

两个原因。首先,因为self也是一个参数,所以只存在于方法体本身,不存在于函数签名中。

但其次,更重要的是,函数默认值在定义时评估,而不是在调用时评估。所以这将引用一个尚未创建的实例。

答案是定义默认值None 并在方法中检查该值。

【讨论】:

    【解决方案2】:

    self 是函数的参数。所以在进入函数之前,不能做self.something,因为在进入函数之前没有self的定义。

    您可以执行以下操作:

    class Example(object):
        def __init__(self, name):
            self.bar = name
    
        def foo(self, param=None):
            if param is None:
                param = self.bar
            # do stuff with param, which now defaults to self.bar
    

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2012-10-23
      • 2021-12-07
      • 2012-10-01
      相关资源
      最近更新 更多