[Python-Dev] Odd new-style class new behavior (original) (raw)

Kevin Jacobs jacobs@penguin.theopalgroup.com
Sat, 30 Mar 2002 12:11:50 -0500 (EST)


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] > > Python 2.2 returns: > print Foo() > > 1 > print Bar() > > [] > > I would expect that Bar() should return [1,2,3]. Am I running into some > clever undocumented feature or a bug?

Is tpinit being called on the returned list?

I suspect that the object construction code would check the result of tp_new to see if the expected type. If not, tp_init should not be called on the instance. I suspect that this check must already be there, or else none of these cases would work at all.

Anyhow, I won't know what is really happening for sure until Monday, when I can run this through gdb. However, some more data points: returning dictionaries, tuples, strings, classic object instances, and user-defined new-style classes all seem to work. Only lists seem to behave this way.

Guido, can you clarify what the "correct behavior" should be for the above cases? Once I know that, I will happily supply a corrective patch if one is necessary.

Regards, -Kevin

-- Kevin Jacobs The OPAL Group - Enterprise Systems Architect Voice: (216) 986-0710 x 19 E-mail: jacobs@theopalgroup.com Fax: (216) 986-0714 WWW: http://www.theopalgroup.com