Skip to main content
 首页 » 编程设计

Python之类方法和 code>self/code> 中的默认值

2025年05月04日20me-sa

我有以下类和方法:

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

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

现在我有一个方法:

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 而我没有明白为什么。

--

我可以这样做吗?

请您参考如下方法:

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

其次,在 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