我有以下类和方法:
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
