为什么在方法定义中自我两次不起作用?

时间:2017-02-18 13:35:28

标签: python python-3.x class

如果我在对象上定义方法:

为什么这样:

  def forecasts(self, rules = self.rules):
     return rules

给出self未定义的错误,但是:

 def forecasts(self, rules=None):                                                                                                                                                                                                         
   if rules is None:                                                                                                                                                                                                                                                      
     rules = self.rules
 return rules

工作?

1 个答案:

答案 0 :(得分:0)

您正在定义一个默认参数,需要在实际定义函数时进行评估。

当Python尝试评估该函数时,它将尝试加载名为self的名称,在其上查找属性。然后将其设置为rules的默认值。

您没有像仅使用self作为位置时那样为参数指定名称,实际上您正在评估需要self.rules的表达式self待定义。