Can't define __call__ within __init__?

Mark Lawrence breamoreboy at yahoo.co.uk
Wed Mar 10 08:40:19 EST 2010


Neal Becker wrote:
> Want to switch __call__ behavior.  Why doesn't this work?  What is the 
> correct way to write this?
> 
> class X (object):
>     def __init__(self, i):
>         if i == 0:
>             def __call__ (self):
>                 return 0
>         else:
>             def __call_ (self):
>                 return 1
> 
> 
> x = X(0)
> 
> x()
> TypeError: 'X' object is not callable
> 
> 
I think it's because X has already been constructed when __init__ is 
called, so __new__ is the place for your conditional code.




More information about the Python-list mailing list