Problem subclassing tuple

sismex01 at hebmex.com sismex01 at hebmex.com
Tue Apr 29 17:56:17 CEST 2003


> From: John Wilson [mailto:tug at wilson.co.uk]
> Sent: Tuesday, April 29, 2003 10:55 AM
> 
> Given this class:
> 
> class Holder(tuple):
>     def __init__(self, *values):
>         tuple.__init__(self, values)
> 
> 
> When I try to create an instance:
> 
> Holder(1, 2)
> 
> I get:
> 
> TypeError: tuple() takes at most 1 argument (2 given)
> 
> It looks like the constructor for the superclass is being 
> called rather than the __init__ method on Holder.
> 
> I'm obviously missing something here. Do I have to supply a 
> __new__ method? Any help would be appreciated.
> 
> John Wilson
>

Howdy.

First of all... What are you trying to do? :-)

Second.  If that's the full definition and intention
of "Holder", then you might want to know (or are
overlooking) the fact that "values", inside __init__,
is already a tuple.

Instead of a class Holder, you could build a function
holder() which simply returns the tuple it receives:

def holder(*values):
    return values

One of the most useful functions I've encountered
which simplified my (programming) life in small but
noticeable ways, is the following:

def Dict(**values):
    return values

This allows me to define dictionaries like this:

d = Dict(one=1, two="Two", three=...)

instead of this:

d = { "one":1, "two":"Two", ... }

So...

hth.

-gus





More information about the Python-list mailing list