Re: python bug when subclassing list? - Python

This is a discussion on Re: python bug when subclassing list? - Python ; 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, ...

+ Reply to Thread
Results 1 to 2 of 2

Re: python bug when subclassing list?

  1. Default Re: python bug when subclassing list?

    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/


  2. Default Re: python bug when subclassing list?

    This is because list() only takes one argument. You will need to pass in an iterable object VS passing in multiple arguments. Technically 'hello', 'goodbye', 1, 'abc', 3 is a tuple (even without the parenthesis), but in a function call, you can't treat it like that. The commas mean something different. You'll need to do this:

    Vector((1, 2, 3))

    That passes in a tuple.

+ Reply to Thread