class declaration shortcut

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


Arnaud Delobelle wrote:
>>>>      http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/502237
[snip]
> 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.

STeVe



More information about the Python-list mailing list