Re: [Python-Dev] Odd new-style class __new__ behavior

Guido van Rossum <guido@python.org> writes:
On 30 Mar 2002, Michael Hudson wrote:
Kevin Jacobs <jacobs@penguin.theopalgroup.com> writes:
Suppose I define:
class Foo(object): def __new__(cls): return 1
class Bar(object): def __new__(cls): return [1,2,3]
1
Python 2.2 returns: print Foo() print Bar()
[]
I would expect that Bar() should return [1,2,3]. Am I running into some clever undocumented feature or a bug?
Is tp_init being called on the returned list?
Correct.
Goody. I always like it when my wild guesses turn out to be accurate :) [...]
Correct behavior is not to return a different type unless you know what its __init__ does.
d = {1:1} d.__init__() d {1: 1} l = [1] l.__init__() l []
This is at least a little odd, I'd have said. Is this just a fluke of implementation? It's not like I really care, though. Cheers, M. -- In the 1950s and 60s there was a regular brain drain of young Australians from the cities to London, but it was because of money, culture and opportunity, not spiders. -- Al Grant, ucam.chat, from Owen Dunn's review of the year

d = {1:1} d.__init__() d {1: 1} l = [1] l.__init__() l []
This is at least a little odd, I'd have said. Is this just a fluke of implementation?
Yes.
It's not like I really care, though.
Me neither. --Guido van Rossum (home page: http://www.python.org/~guido/)
participants (2)
-
Guido van Rossum
-
Michael Hudson