Felix Wiemann wrote:
> Steven Bethard wrote:
>>     http://www.python.org/2.2.3/descrintro.html#__new__
>
[snip]
>
> I'm just seeing that the web page says:
>
> | 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.
>
> However, the latter doesn't seem to be true, or am I missing
> something?
>
>>>>class A(object):
> ...   def __init__(self):
> ...     print 'Init of A.'
> ...
>
>>>>instance = A()
> Init of A.
>
>>>>class B(object):
> ...   def __new__(self):
> ...     return instance
> ...   def __init__(self):
> ...     print 'Init of B.'
> ...
>
>>>>B()  # <--------- A's __init__ is *not* called.
> <__main__.A object at 0x4062424c>
>
>>>>instance = object.__new__(B)
>>>>B()  # <--------- B's __init__ is called
> Init of B.
> <__main__.B object at 0x406243ec>
>
> So there seems to be some type-checking in type.__call__.

Yeah, I saw the same thing in playing around with this. Don't know what to make of it. I wonder if we should file a documentation bug? I can't find __new__ explained anywhere in the Language Reference. Can documentation bugs be filed for descrintro.html?

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

Reply via email to