[EMAIL PROTECTED] a écrit : > Hi all, > > I dare risk my brain exploding by reaching for the understanding of > metaclasses. > > At first i thought i almost got them, even if vaguely back in a corner > of my mind, my understanding was that, as classes' class a metaclass > would be able to return a different class based on input... > > ... until i thought of factory functions and, Python considering > classes just another first-class object, as such i started considering > them. > > So is anybody experienced in the dark side semantics of Python willing > to explain the difference, in simple terms, between a metaclass and a > function that returns a class?
The same as the difference between a class and a function that returns an instance. One of the main use of metaclasses it to allow "postprocessing" of the class object - ie, to automatically add extra features to a class, usually based on the class definition. This is mostly useful for framework stuff, where it can avoids quite a lot of boilerplate. IOW, the 'input' of a metaclass is often the class object itself. The metaclass constructor (I mean the proper constructor, __new__) let you play with the class bases and attributes before the class object is instanciated, and the initializer (__init__) let you modify the class object after instanciation. You can of course use the metaclass constructor as a class factory (which it is), but it's obviously overkill if all you need is to dynamically 'select' a class based on either inputs and/or environment (configuration, platform, whatnot). HTH -- http://mail.python.org/mailman/listinfo/python-list