Учитывая класс Foo
(независимо от того, является ли он классом нового стиля или нет), как вы сгенерируете все базовые классы в любом месте иерархии наследования issubclass
?
python
class
inheritance
oop
introspection
Шридхар Ратнакумар
источник
источник
inspect.getmro(obj)
вместоinspect.getmro(type(obj))
.См.
__bases__
Свойство, доступное на питонеclass
, которое содержит кортеж базовых классов:источник
getmro
явно сказано: «Ни один класс не появляется в этом кортеже более одного раза»?__bases__
поднимается только на один уровень . (Как и предполагает ваша рекурсивная утилита, но беглый взгляд на пример может не уловить этого.)inspect.getclasstree()
создаст вложенный список классов и их баз. Использование:источник
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
вы можете использовать
__bases__
кортеж объекта класса:Кортеж, возвращаемый функцией,
__bases__
имеет все свои базовые классы.Надеюсь, поможет!
источник
__bases__
Обратите внимание, что в python 3.x каждый класс наследуется от класса базового объекта.
источник
Согласно документу Python , мы также можем просто использовать
class.__mro__
атрибут илиclass.mro()
метод:источник
Хотя ответ Йохена очень полезен и верен, поскольку вы можете получить иерархию классов с помощью метода .getmro () модуля inspect, также важно подчеркнуть, что иерархия наследования Python выглядит следующим образом:
например:
Наследующий класс
например:
Унаследованный класс
Один класс может наследовать от другого - атрибуты класса наследуются - в частности, его методы наследуются - это означает, что экземпляры наследующего (дочернего) класса могут получить доступ к атрибутам унаследованного (родительского) класса.
экземпляр -> класс -> затем унаследованные классы
с помощью
покажет вам иерархию в Python.
источник