Dada una clase Foo
(ya sea una clase de estilo nuevo o no), ¿cómo se generan todas las clases base, en cualquier lugar de la jerarquía de herencia issubclass
?
python
class
inheritance
oop
introspection
Sridhar Ratnakumar
fuente
fuente
inspect.getmro(obj)
lugar de hacerloinspect.getmro(type(obj))
.Vea la
__bases__
propiedad disponible en una pythonclass
, que contiene una tupla de las clases base:fuente
getmro
explícitamente dice "Ninguna clase aparece más de una vez en esta tupla"?__bases__
solo sube un nivel . (Como su utilidad recursiva implica, pero una mirada superficial al ejemplo podría no captar eso.)inspect.getclasstree()
creará una lista anidada de clases y sus bases. Uso:fuente
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
puedes usar la
__bases__
tupla del objeto de clase:La tupla devuelta por
__bases__
tiene todas sus clases base.¡Espero eso ayude!
fuente
__bases__
atención que en python 3.x cada clase hereda de la clase de objeto base.
fuente
Según el documento de Python , también podemos simplemente usar el
class.__mro__
atributo o elclass.mro()
método:fuente
Aunque la respuesta de Jochen es muy útil y correcta, ya que puede obtener la jerarquía de clases utilizando el método .getmro () del módulo de inspección, también es importante resaltar que la jerarquía de herencia de Python es la siguiente:
ex:
Una clase heredadora
ex:
Una clase heredada
Una clase puede heredar de otra: los atributos de la clase 'se heredan', en particular, sus métodos se heredan, esto significa que las instancias de una clase heredadora (secundaria) pueden acceder atribuidas a la clase heredada (principal)
instancia -> clase -> luego clases heredadas
utilizando
le mostrará la jerarquía, dentro de Python.
fuente