James Stroud jstroud at mbi.ucla.edu
Sun Nov 6 07:45:37 CET 2005

Hello All,

I'm running 2.3.4

I was reading the documentation for classes & types
And stumbled on this paragraph:

__new__ must return an object. There's nothing that requires that it return a 
new object that is an instance of its class argument, although that is the 
convention. If you return an existing object, the constructor call will still 
call its __init__ method. If you return an object of a different class, its 
__init__ method will be called.

The quote implies that when I call carol, b.__init__ should be called. 
However, this does not seem to be the case (see code below). What am I not 
understanding? Shouldn't the interpreter call b.__init__ when b is returned 
from carol.__new__?


py> class bob(object):
...   def __init__(self):
...     print self.x
...   x = 2
py> class carol(object):
...   def __new__(cls):
...     return b
py> b=bob()
py> b.x
py> c = carol()   # should print "2"
py> c
<__main__.bob object at 0x404333cc>

James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095


More information about the Python-list mailing list