Can __init__ not return an object?

Steve Holden steve at holdenweb.com
Sun Apr 22 21:01:02 EDT 2007


Steven W. Orr wrote:
> When I go to create an object I want to be able to decide whether the 
> object is valid or not in __init__, and if not, I want the constructor to 
> return something other than an object, (like maybe None). I seem to be 
> having problems. At the end of __init__ I say (something like)
> 
>  	if self.something < minvalue:
>  	    del self
>  	    return None
> 
> and it doesn't work. I first tried just the return None, then I got crafty 
> and tried the del self. Is what I'm trying to do possible in the 
> constructor or do I have to check after I return? Or would raising an 
> exception in the constructor be appropriate?
> 
> Am I even being clear?
> 
The trouble you have is that it's too late by the time you get to 
__init__. The object has been created. The reason that "del self" 
doesn't work is that all it does is remove the local name "self" from 
the namespace of the method - you will find that if __init__ returns 
anything *except* None you get an exception.

Don't think of __init__ as a constructor - that's __new__, which *is* 
expected to return a newly-created instance.

Raising an exception in __init__ is perfectly permissible, but adopting 
the new-style classes (inheriting from object) might give you a more 
efficient solution to your problem.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb     http://del.icio.us/steve.holden
Recent Ramblings       http://holdenweb.blogspot.com




More information about the Python-list mailing list