Me gustaría poder iterar sobre todas las clases base, tanto directas como indirectas, de una clase dada, incluida la clase misma. Esto es útil en el caso en que tenga una metaclase que examine una clase de Opciones interna de todas sus bases.¿Hay una función estándar para iterar sobre las clases base?
Para ello, escribí lo siguiente:
def bases(cls):
yield cls
for direct_base in cls.__bases__:
for base in bases(direct_base):
yield base
¿Hay una función estándar de hacer esto por mí?
Esto tiene la (discutible) desventaja de no trabajar con clases antiguas. 'inspect.getmro' devuelve' cls .__ mro__' si está presente (que está en nuevas clases de estilo) y realiza una búsqueda personalizada si no lo está. (Dato curioso: puede generar un error de recursión creando una jerarquía de clase de estilo anterior con más clases que la profundidad máxima de recursión y llamando a 'getmro' en ella) – aaronasterling