"> One metaclass (i.e. type) has a class attribute that refers to itself. > > Other metaclasses have a class attribute that refers to the metaclass's > metaclass. I can't think of any situation where a metaclass would be its > own metaclass except for 'type' itself, but then I think I've got a > headache trying to think about this
In 3.0, with old classes gone and all classes called 'classes'*: All objects are instances of base class 'object', nearly always indirectly via subclasses of 'object'. All classes are subclasses of 'object', including base metaclass 'type'. The methods of 'object' are the methods that apply to objects as objects in general, as instances. Many of these are 'base methods' that get overridden in subclasses to fit their instances. All classes (including object and type, dropping the quotes) are instances of type, usually directly but occassionally via subclasses of type. In other words, the subclass type defines the subclass of objects that are classes. The additional attributes and methods of type (beyond those inherited from object ) are, therefore, those that specifically apply to all classes. These include __call__, by which classes (including 'object' and 'type' itself) make instances. The circularity conundrum is that type is a subclass of object while the immutable class attribute of both object and type is type. The answer, of course, is that a Python interpreter, as god of a Python universe, creates both 'ex nihilo', from nothing, with the required attributes. * In 3.0a5+ >>> type(type) <class 'type'> # instead of <type 'type'>, and so on. Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list