Problem subclassing tuple

sismex01 at hebmex.com sismex01 at hebmex.com
Tue Apr 29 15:27:25 EDT 2003


> From: John Wilson [mailto:tug at wilson.co.uk]
> Sent: Tuesday, April 29, 2003 2:22 PM
> 
> Success!!!
> 
> class Holder(tuple):
>     def __new__(cls, *args, **kargs):
>         return tuple.__new__(cls, args)
> 
> 
> is the way to do it for a tuple :))))))
> 
> John Wilson
>

Heh, excellent :-)

You might want to make it "cooperative", that is,
instead of using "tuple.__new__", use
"super(Holder,cls).__new__"

This delegates the search for the superclass to the
function super(); and that gives you the ability
to have multiple inheritance, since super() will
"do the right thing" when getting your current
class' superclass; so every class which defines
a __new__ method has it called.

:-)

Like this:

Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class Holder(tuple):
...   def __new__(klass, *args, **kwargs):
...     return super(Holder,klass).__new__(klass, args)
...
>>> h = Holder(1,2,3)
>>>
>>> h
(1, 2, 3)
>>> type(h)
<class '__main__.Holder'>
>>>


-gus





More information about the Python-list mailing list