libb.ultimate_type

ultimate_type(typeobj)[source]

Find the ultimate non-object base class in an inheritance hierarchy.

Traverses the inheritance chain to find the most fundamental base class that isn’t ‘object’ itself. Useful for identifying the core type of subclassed objects.

Parameters:

typeobj (object | type | None) – An object, type, or None to analyze.

Returns:

The ultimate base type (excluding object).

Return type:

type

Finding Base Types:

>>> import datetime
>>> class DateFoo(datetime.date):
...     pass
>>> class DateBar(DateFoo):
...    pass
>>> d0 = datetime.date(2000, 1, 1)
>>> d1 = DateFoo(2000, 1, 1)
>>> d2 = DateBar(2000, 1, 1)
>>> ultimate_type(d0)
<class 'datetime.date'>
>>> ultimate_type(d1)
<class 'datetime.date'>
>>> ultimate_type(d1)
<class 'datetime.date'>
>>> ultimate_type(d1.__class__)
<class 'datetime.date'>
>>> ultimate_type(d2.__class__)
<class 'datetime.date'>

Special Cases:

>>> ultimate_type(None)
<class 'NoneType'>
>>> ultimate_type(object)
<class 'object'>