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:
  • obj (object) – The instance to extend.

  • cls (type) – The class to mix into the instance’s hierarchy.

  • left (bool) – If True, adds cls with higher precedence; if False, lower precedence.

Return type:

None

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'>)