Michael Spencer wrote:
BTW, as I mentioned in a previous comment, I believe this would be more plainly written as type(self).__new__(), to emphasize that you are constructing the object without initializing it. (There is a explanation of __new__'s behaviour at http://www.python.org/2.2/descrintro.html#__new__).

There is also now documentation in the standard location:

http://docs.python.org/ref/customization.html

And just to clarify Michael's point here, writing this as __new__ means that __init__ is not called twice:

py> class C(object):
...     def __new__(cls):
...         print '__new__'
...         return super(C, cls).__new__(cls)
...     def __init__(self):
...         print '__init__'
...
py> c = C()
__new__
__init__
py> c2 = type(c)(); c2.__init__()
__new__
__init__
__init__
py> c3 = type(c).__new__(C); c3.__init__()
__new__
__init__

But definitely check the docs for more information on __new__. Some of the interworkings are kind of subtle.

STeVe
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to