default argument

Dave Angel davea at ieee.org
Tue May 11 16:42:35 EDT 2010



Back9 wrote:
> On May 11, 3:20 pm, Chris Rebert <c... at rebertia.com> wrote:
>   
>> On Tue, May 11, 2010 at 12:08 PM, Back9 <backgoo... at gmail.com> wrote:
>>     
>>> On May 11, 3:06 pm, Back9 <backgoo... at gmail.com> wrote:
>>>       
>> <snip>
>>     
>>>> When i try it, it complains about undefined self.
>>>>         
>>>> i don't know why.
>>>>         
>>>> TIA
>>>>         
>>> Sorry
>>> here is the what i meant
>>> class test:
>>>  self._value =0
>>>  def func(self, pos =elf._value)
>>>       
>> You're still defining the class, so how could there possibly be an
>> instance of it to refer to as "self" yet (outside of a method body)?
>> Also, just so you know, default argument values are only evaluated
>> once, at the time the function/method is defined, so `pos > self._value` is never going to work.
>>
>> Do you mean for self._value to be a class variable (Java lingo: static
>> variable), or an instance variable?
>>
>> Cheers,
>> Chris
>> --http://blog.rebertia.com
>>     
>
> self._value will be instance variable
>
>   
If you want an instance value to be your default, you'll need to us an 
indirect approach.  There are no instances at the time the class is 
defined.  So you want to create such a value in the __init__() method.
Something like the following (untested):

class  Test(object):
     def __init__(self, initvalue):
         self.value = initvalue
     def func(self, pos = None):
          if pos=None:   pos = self.value
          etc.

x = Test(44)
x.func(91)          #uses 91 for pos
x.func()              #uses 44 for pos


DaveA



More information about the Python-list mailing list