By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,526 Members | 1,618 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,526 IT Pros & Developers. It's quick & easy.

Re: python bug when subclassing list?

P: n/a
Hamish McKenzie wrote:
I want to write a Vector class and it makes the most sense to just
subclass list. I also want to be able to instantiate a vector using either:

Vector( 1, 2, 3 )


Vector( [1, 2, 3] )

so I have this:

class Vector(list):

def __new__( cls, *a ):


print a

return list.__new__(cls, a)


print 'broken'

return list.__new__(cls, list(a))

doing Vector( 1, 2, 3 ) on this class results in a TypeError – which
doesn’t seem to get caught by the try block (ie “broken” never gets
printed, and it never tries to

I can do pretty much the exact same code but inheriting from tuple
instead of list and it works fine.

is this a python bug? or am I doing something wrong?
Vector(1, 2, 3) fails for exactly the same reasons as list:
>>list(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list() takes at most 1 argument (3 given)

So the behavior you want cannot be inherited from list, since list
doesn't implement that behavior!

As toy our assertion that you can subclass tuple that way, I am inclined
to doubt it because of this:
>>tuple(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: tuple() takes at most 1 argument (3 given)

Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC

Nov 12 '08 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.