self
I have the following class and method:
class Basis(object):
def __init__(self, P = {\'dimension\': 1, \'generation\':1}):
self.P = P
self.P[\'angle\'] = n
Python default values for arguments are evaluated when the function is defined, not when the function is called.
You need to do something like:
def foo(self, x, y=None):
if y is None:
y = self.defval
This is also the reason for which having a mutable default (e.g. a dictionary) is a dangerous trap in Python; if you change the value that was given by default you're also changing what will be the default in future calls.
First of all, the defaults for keywords arguments in methods can't be mutable objects, like list
, dict
, etc. Here you can read why.
Secondly, in def make_projection(self, dimension, angle = self.P['angle'])
the self
variable is still not defined, so you can get self.P
only in method's body.
Try this:
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