Sublassing tuple works, subclassing list does not
Rob Williscroft
rtw at rtw.me.uk
Wed Mar 31 05:02:27 EDT 2010
Frank Millman wrote in news:mailman.1360.1270018159.23598.python-
list at python.org in comp.lang.python:
> I came up with a simple solution that seems to work -
>
>>>> class MyTuple(tuple):
> ... def __new__(cls, names, values):
> ... for name, value in zip(names, values):
> ... setattr(cls, name, value)
> ... return tuple.__new__(cls, values)
> ...
>>>> names = ['A', 'B', 'C']
>>>> values = ['a', 'b', 'c']
>>>>
>>>> tup = MyTuple(names, values)
>>>>
Are you aware you are adding attributes to the class here, IOW:
MyTuple.C == 'c'
If you want to add attibutes to the instance:
class MyTuple(tuple):
def __new__(cls, names, values):
r = tuple.__new__(cls, values)
for name, value in zip(names, values):
setattr(r, name, value)
return r
names = ['A', 'B', 'C']
values = ['a', 'b', 'c']
tup = MyTuple(names, values)
assert tup[0] == 'a'
assert tup.B == 'b'
try:
MyTuple.C
except AttributeError:
pass
else:
assert False
More information about the Python-list
mailing list