At Tuesday 7/11/2006 21:47, Jia Lu wrote:

> In Python, the real constructor is called __new__, >
> Carl Banks

But the code below won't invoke __new__:

Is this a question, or just for making things more and more confusing to beginners?

class Test:
    def __new__(self, value):
        print "__new__",value

For old-style classes __new__ is not used. On new-style classes it's used mostly for dealing with immutable objects. The code should be:

class NewStyle(object):
    "A new style class inherits from object in some way"
    def __new__(cls, value):
        print "NewStyle.__new__",value
        return super(NewStyle, cls).__new__(cls, value)
        # return object.__new__(cls, value) for lazy people

    def __init__(self, value):
        print "NewStyle.__init__",value

class OldStyle:
    "An old style class does not inherit from object"
    def __init__(self, value):
        print "OldStyle.__init__",value

n = NewStyle(1)
o = OldStyle(2)


--
Gabriel Genellina
Softlab SRL
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! ¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to