On Aug 27, 5:44 pm, Chris Rebert <c...@rebertia.com> wrote: > On Thu, Aug 27, 2009 at 2:37 PM, seanacais<kccnos...@glenevin.com> wrote: > > I'm working on a program where I wish to define the default value of a > > method as a value that was set in __init__. I get a compilation error > > saying that self is undefined. > > > As always a code snippet helps :-) > > > class foo: > > def __init__(self, maxvalue): > > self.maxvalue = maxvalue > > self.value = 0 > > > def put(self, value=self.maxvalue): > > self.value = value > > > So if I call foo.put() the value is set to maxvalue but maxvalue can > > be specified when I instantiate foo. > > python test.py > > Traceback (most recent call last): > > File "test.py", line 1, in <module> > > class foo: > > File "test.py", line 6, in foo > > def put(self, value=self.maxvalue): > > NameError: name 'self' is not defined > > Explanations and/or workarounds much appreciated. > > Workaround: > > class foo: > def __init__(self, maxvalue): > self.maxvalue = maxvalue > self.value = 0 > > def put(self, value=None): > self.value = self.value if value is None else value > > Explanation: > > Default values are only evaluated once, when the class is defined, > thus "self" is not defined at that point since the class is still > being defined when the method definition is executed and thus there > can be no instances yet anyway. > > Cheers, > Chris > --http://blog.rebertia.com
That clears that up for me. Thank you! -- http://mail.python.org/mailman/listinfo/python-list