class declaration shortcut

Steven Bethard steven.bethard at
Thu Mar 1 21:11:50 CET 2007

Arnaud Delobelle wrote:
> Although I don't see the necessity of a metaclass: you could have
> class Record(object):
>     def __init__(self, *vals):
>         for slot, val in zip(self.__slots__, vals):
>             setattr(self, slot, val)
>     # And the other methods
> if you want positional slots initialisation.  I chose keyword
> arguments in mine

You could certainly do it that way, but note that the one with the 
metaclass not only allows *either* positional or keyword arguments, but 
also displays better help messages -- using the *vals or **vals code, 
help() will tell you something like:

     __init__(self, **vals)

while using the metaclass-generated __init__, help() will tell you the 
more informative:

     __init__(self, name)

(Or whatever signature is appropriate given the __slots__.) So no, it's 
not necessary, but it does have a few advantages.


More information about the Python-list mailing list