[Python-Dev] Language reference updated for metaclasses (original) (raw)

Michael Foord fuzzyman at voidspace.org.uk
Tue Jun 5 10:55:04 CEST 2012


On 5 Jun 2012, at 09:34, Mark Shannon wrote:

Steven D'Aprano wrote:

On Tue, Jun 05, 2012 at 10:20:58AM +0300, Eli Bendersky wrote:

Still, instance of type()" is a bit too cryptic for mere mortals, IMHO. I think that if somebody finds "instance of type" too cryptic, they won't have any chance at all to understand metaclasses. Personally, I think there is a lot confusing about metaclasses, but the idea that classes are instances (objects) is not one of them. One thing that is confusing is that the metaclass parameter in class creation is not the metaclass (class of the class), but the class factory. For example: def silly(*args): print(*args) return int class C(metaclass=silly): def m(self): pass C () {'m': <function C.m at 0xb721fe14>, 'qualname': 'C', 'module': 'main'} print(C) int In this example the metaclass (ie the class of C) is type (C is int), even though the declared metaclass is 'silly'. I assume it is too late to change the name of the 'metaclass' keyword to 'factory', but we could use that terminology in the docs.

Well, the same was always true in Python 2 as well - metaclass could be a function that was identically "silly". The real "metaclass" (type of the class) is whatever you use to construct the class.

Michael

Cheers, Mark


Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk

-- http://www.voidspace.org.uk/

May you do good and not evil May you find forgiveness for yourself and forgive others May you share freely, never taking more than you give. -- the sqlite blessing http://www.sqlite.org/different.html



More information about the Python-Dev mailing list