Question on default value of __init__

Werner Schiendl ws-news at gmx.at
Mon Nov 19 11:15:49 CET 2001


Hi,

yes, this is the default behaviour of Python.
The default value you provide is stored and passed to every invokation of
the function/method.
This means, the _same_ instance of foo will be passed for every call to
bar.__init__()

To get what you probably want, use None as the default and handle that
special case by creating a new instance explicitely.
This also prevents an instance of foo being created, before you create bar.

hth
Werner

"Bernie" <bernie at pacific.net.hk> wrote in message
news:3BF8D3BC.105F0536 at pacific.net.hk...
> Hello all,
>
> When I run test.py, an instance of foo is created.  Is this the default
behavior
> in Python for default value?  i.e. The value must be exist as an object.
Are
> there any way to delay the creation of foo() until bar() is created.
>
> Bernie
>
> test.py:
>
>     class foo:
>         def __init__( self, param=None):
>             print 'executed!'
>     self.__param = param
>
>         def __nonzero( self):
>             if self.__param:
>                 return 1
>             else:
>                 return 0
>
>     class bar:
>         def __init__( self, param=foo()):
>             assert isinstance( param, foo), '"in" must be an instance of
foo'
>             pass





More information about the Python-list mailing list