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 ) > > OR > > Vector( [1, 2, 3] ) > > > > > > so I have this: > > > > class Vector(list): > > def __new__( cls, *a ): > > try: > > print a > > return list.__new__(cls, a) > > except: > > 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) regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list