Greetings. I've been looking at O'Reilly's "Python Cookbook", 2nd edition, just for my own edification. In particular, I'm looking at chapter 6, "Object-Oriented Programming".
Recipe 6.3, "Restricting Attribute Setting", intends to solve the problem that, by default, users can add and modify attributes of class instances, or even classes themselves, as in the following example: >>> class Foo(object): pass ... >>> f = Foo() >>> f.age = 42 >>> f.age 42 >>> Foo.loc = 'Tralfamadore' >>> g = Foo() >>> g.loc 'Tralfamadore' The approach, in essence, is a fairly standard one: redefine the __setattr__ method to add some logic to enforce whatever restrictions you choose, but the details are a bit convoluted. Copyright law probably prohibits me from posting the entire recipe, but here's the piece that leads to my question (see below): class NoNewAttrs(object): """ subclasses of NoNewAttrs inhibit addition of new attributes, while allowing existing attributed to be set to new values. """ # block the addition new attributes to instances of this class __setattr__ = no_new_attributes(object.__setattr__) class __metaclass__(type): "simple custom metaclass to block adding new attrs to this class" __setattr__ = no_new_attributes(type.__setattr__) (Beware line breaks introduced by email software.) Finally, my question: can somebody enlighten me as to how and why the "custom metaclass", class __metaclass__(type): does something useful? Thanks. - Mike -- Michael Hannon mailto:[EMAIL PROTECTED] Dept. of Physics 530.752.4966 University of California 530.752.4717 FAX Davis, CA 95616-8677 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor