Re: python bug when subclassing list?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Steve Holden

    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__(cl s, a)
    >
    except:
    >
    print 'broken'
    >
    return list.__new__(cl s, 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/

Working...