Dada uma classe Foo
(seja uma classe de novo estilo ou não), como você gera todas as classes base - em qualquer lugar da hierarquia de herança issubclass
?
python
class
inheritance
oop
introspection
Sridhar Ratnakumar
fonte
fonte
inspect.getmro(obj)
vez deinspect.getmro(type(obj))
.Veja a
__bases__
propriedade disponível em um pythonclass
, que contém uma tupla das classes de bases:fonte
getmro
explicitamente diz "Nenhuma classe aparece mais de uma vez nesta tupla"?__bases__
apenas sobe um nível . (Como sua utilidade recursiva implica, mas um breve olhar sobre o exemplo pode não pegar em que.)inspect.getclasstree()
criará uma lista aninhada de classes e suas bases. Uso:fonte
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
você pode usar a
__bases__
tupla do objeto de classe:A tupla retornada por
__bases__
possui todas as suas classes base.Espero que ajude!
fonte
__bases__
atenção que no python 3.x toda classe herda da classe de objeto base.
fonte
De acordo com o documento Python , também podemos simplesmente usar
class.__mro__
atributo ouclass.mro()
método:fonte
Embora a resposta de Jochen seja muito útil e correta, como você pode obter a hierarquia de classes usando o método .getmro () do módulo inspecionar, também é importante destacar que a hierarquia de herança do Python é a seguinte:
ex:
Uma classe herdada
ex:
Uma classe herdada
Uma classe pode herdar de outra - A classe atribuída é herdada - em particular, seus métodos são herdados - isso significa que instâncias de uma classe herdada (filho) podem acessar atribuídas à classe herdada (pai)
instância -> classe -> classes herdadas
usando
mostrará a hierarquia no Python.
fonte