libb.extend_instance
- extend_instance(obj, cls, left=True)[source]
Dynamically extend an instance’s class hierarchy at runtime.
Modifies an object’s class to include additional base classes, effectively adding mixins or extending functionality after instantiation.
- Parameters:
- Return type:
Method Resolution Order Demonstration:
>>> from pprint import pprint >>> class X:pass >>> class Y: pass >>> class Z:pass >>> class A(X,Y):pass >>> class B(A,Y,Z):pass >>> class F(B): pass >>> pprint(F.mro()) [<class '....F'>, <class '....B'>, <class '....A'>, <class '....X'>, <class '....Y'>, <class '....Z'>, <class 'object'>]
Left Precedence (higher priority):
>>> class F_L: ... def __init__(self): ... extend_instance(self, B, left=True) >>> f_l = F_L() >>> pprint(f_l.__class__.__mro__) (<class '....F_L'>, <class '....B'>, <class '....A'>, <class '....X'>, <class '....Y'>, <class '....Z'>, <class '....F_L'>, <class 'object'>)
Right Precedence (lower priority):
>>> class F_R: ... def __init__(self): ... extend_instance(self, B, left=False) >>> f_r = F_R() >>> pprint(f_r.__class__.__mro__) (<class '....F_R'>, <class '....F_R'>, <class '....B'>, <class '....A'>, <class '....X'>, <class '....Y'>, <class '....Z'>, <class 'object'>)