Hamish McKenzie wrote:
Vector(1, 2, 3) fails for exactly the same reasons as list:
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:
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/
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?
>
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?
>
>>list(1, 2, 3)
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)
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/