首页 > 解决方案 > Python - 类方法中的默认值和self

问题描述

我有以下类和方法:

class Basis(object):

 def __init__(self, P = {'dimension': 1, 'generation':1}):

  self.P = P
  self.P['angle'] = np.pi/4

不包含 的 P a在哪里,因此我在构造函数中设置它(角度现在是固定的,但我将来可能会将它作为用户定义的函数)。dict'angle'

现在我有一个方法:

def make_projection(self, dimension, angle = np.pi/4):
 return (angle*3)

我想angle将此函数中的默认值设置self.P['angle']为构造函数中定义的值。
我不想self.P['angle']在函数的主代码中使用 ,因为我可能会单独使用该方法,给它一个不同的角度。

如果我只是这样做: def make_projection(self, dimension, angle = self.P['angle']): ,它会强调两者self,我不明白为什么。

--

这是我被允许做的事情吗?

标签: pythonclassconstructor

解决方案


首先,方法中的关键字参数的默认值不能是可变对象,例如list,dict等。在这里您可以阅读原因。

其次,在def make_projection(self, dimension, angle = self.P['angle'])变量self中仍然没有定义,所以你self.P只能在方法体中获取。

尝试这个:

class Basis(object):

  def __init__(self, P=None):
    self.P = P or {'dimension': 1, 'generation':1}
    self.P['angle'] = np.pi/4

  def make_projection(self, dimension, angle=None):
    angle = angle if angle is not None else self.P['angle']  # we must compare to None, because angle can be 0.
    return angle*3

推荐阅读