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 -- http://mail.python.org/mailman/listinfo/python-list