While executing the class definition which object is referenced by the first argument of the class method, Y r Object attributes not allowed as default arguments

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Mar 7 02:04:14 CET 2008


En Thu, 06 Mar 2008 22:48:42 -0200, Krishna <Krishna.00.K at gmail.com>  
escribi�:

>>>> class Test(object):
> ...     def __init__(self):
> ...             self.a= 2
> ...     def func(self, k = self.a):
> ...             print k
> ...
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
>   File "<stdin>", line 4, in Test
> NameError: name 'self' is not defined
>>>>
>
> In the 'definition of the class', what would the first argument 'self'
> in the methods evaluate to; when we have an object defined, it is
> bound to the object reference, but what happens while the class
> definition is executed, which I believe happens when the module
> containing the class definition is imported

Function default arguments are evaluated when the function is defined  
(when the class is defined, in this case) so "self" itself has not a  
value. Try this instead:

     def func(self, k=None):
         if k is None:
             k = self.a
         print k

If None is an allowed argument, use a special marker instead:

_marker=object()
...

     def func(self, k=_marker):
         if k is _marker:
             k = self.a
         ...

-- 
Gabriel Genellina




More information about the Python-list mailing list