libb.makecls
- makecls(*metas, **options)[source]
Class factory that resolves metaclass conflicts automatically.
When multiple inheritance involves conflicting metaclasses, this factory generates a compatible metaclass that inherits from all necessary metaclasses.
- Parameters:
- Return type:
- Returns:
A class factory function that creates classes with resolved metaclasses.
Metaclass Conflict Resolution:
>>> class M_A(type): ... pass >>> class M_B(type): ... pass >>> class A(metaclass=M_A): ... pass >>> class B(metaclass=M_B): ... pass
Normal Inheritance Fails:
>>> class C(A,B): ... pass Traceback (most recent call last): ... TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Using makecls Resolves the Conflict:
>>> class C(A,B,metaclass=makecls()): ... pass >>> (C, C.__class__) (<class '....C'>, <class '...._M_AM_B'>)
Metaclass Caching:
>>> class D(A,B,metaclass=makecls()): ... pass >>> (D, D.__class__) (<class '....D'>, <class '...._M_AM_B'>) >>> C.__class__ is D.__class__ True