module documentation

C3 linearization algorithm.

Class Dependency No class docstring; 1/2 property documented
Class DependencyList A class represents list of linearizations (dependencies) The last element of DependencyList is a list of parents. It's needed to the merge process preserves the local precedence order of direct parent classes.
Exception LinearizationError Undocumented
Function c3_merge The merge operation of the C3 superclass linearization algorithm.
Type Variable T Undocumented
def c3_merge(*lists) -> list: (source)

The merge operation of the C3 superclass linearization algorithm.

Example of a naive usage:

>>> def mro(cls: T, getbases: Callable[[T], List[T]]) -> List[T]:
...     result = [cls]
...     if not (bases:=getbases(cls)):
...         return result
...     else:
...         return result + c3_merge(*[mro(kls, getbases) for kls in bases], bases)
>>> class B:...
>>> class A(B):...
>>> class B(B):...
>>> class C(A,B):...
>>> C.__mro__
(<class 'pydoctor.mro.C'>, <class 'pydoctor.mro.A'>, <class 'pydoctor.mro.B'>, <class 'pydoctor.mro.B'>, <class 'object'>)
>>> mro(C, lambda cls: cls.__bases__)
[<class 'pydoctor.mro.C'>, <class 'pydoctor.mro.A'>, <class 'pydoctor.mro.B'>, <class 'pydoctor.mro.B'>, <class 'object'>]
See Also
https://en.m.wikipedia.org/wiki/C3_linearization

Undocumented

Value
TypeVar('T')