April 2019
Intermediate to advanced
646 pages
16h 48m
English
Metaclasses are not a new feature and have been available in Python since version 2.2. Anyway, the syntax of this changed significantly and this change is neither backward nor forward compatible. The new syntax is as follows:
class ClassWithAMetaclass(metaclass=type):
pass
In Python 2, this must be written as follows:
class ClassWithAMetaclass(object):
__metaclass__ = type
Class statements in Python 2 do not accept keyword arguments, so Python 3 syntax for defining metaclasses will raise the SyntaxError exception on import. It is still possible to write code using metaclasses that will run on both Python versions, but it requires some extra work. Fortunately, compatibility-related packages such as six ...