python - 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
,我不明白为什么。
--
这是我被允许做的事情吗?
解决方案
首先,方法中的关键字参数的默认值不能是可变对象,例如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
推荐阅读
- javascript - 底部粘性菜单可以滚动第一个屏幕
- android - TalkBack 可访问性 StaggeredGridLayoutManager 焦点顺序错误
- angular - PrimeNG:“p-table”不是已知元素
- python - 将 print 与 open= 一起使用
- javascript - JavaScript 在 Anki 2.0 版本中有效,但在 2.1 版本中无效
- php - 调试本地 Symfony 服务器并非在所有地方都有效
- javascript - 谷歌地图 javascript api 更新标记
- python - Element.text 数据丢失
- extjs - 如何在 Ext.Component ExtJS 中显示存储中的数据
- regex - regexp tcl 搜索变量