Множественное наследование в Python
ООП на Python » Python для начинающих » Общие вопросы python наследование, изучить python, множественное наследование python
В определенных классах в круглых скобках можно указать сразу несколько базовых классов через запятую. В этом случае поиск идентификаторов производится вначале в производном классе, затем в базовом классе, расположенном первым в списке, далее просматриваются все базовые классы базового класса. Только после этого просматривается базовый класс, расположенный в списке правее, и все его базовые классы. Список базовых классов просматривается слева направо. Результатом поиска будет первый найденный идентификатор. Рассмотрим множественное наследование на примере.
Множественное наследование
class Class1: # Базовый класс для класса Class2
def f_func1(self):
print "Метод f_func1() класса Class1"
class Class2(Class1): # Класс Class2 наследует класс Class1
def f_func2(self):
print "Метод f_func2() класса Class2"
class Class3(Class1): # Класс Class3 наследует класс Class1
def f_func1(self):
print "Метод f_func1() класса Class3"
def f_func2(self):
print "Метод f_func2() класса Class3"
def f_func3(self):
print "Метод f_func3() класса Class3"
def f_func4(self):
print "Метод f_func4() класса Class3"
class Class4(Class2, Class3): # Множественное наследование
def f_func4(self):
print "Метод f_func4() класса Class4"
c1 = Class4() # Создаем экземпляр класса Class4
c1.f_func1() # Выведет: Метод f_func1() класса Class1
c1.f_func2() # Выведет: Метод f_func2() класса Class2
c1.f_func3() # Выведет: Метод f_func3() класса Class3
c1.f_func4() # Выведет: Метод f_func4() класса Class4
Итак, метод f_func1() определен в двух классах - Class1 и Class3. Так как класс Class2 стоит первым в списке базовых классов, вначале просматривается этот класс, а затем все его базовые классы. Поэтому метод f_func1() будет найден в классе Class1, а не в классе Class3.
Метод f_func2() также определен в двух классах - Class2 и Class3. Так как класс Class2 стоит первым в списке базовых классов, то метод будет найден именно в этом классе. Чтобы наследовать метод из класса Class3, следует указать это явным образом. Передаем определение класса Class4 из предыдущего примера и наследуем метод f_func2() из класса Class3.
Указание класса при наследовании метода
class Class4(Class2, Class3): # Множественное наследование
# Наследуем f_func2() из класса Class3, а не из класса Class2
f_func2 = Class3.f_func2
def f_func4(self):
print "Метод f_func4() класса Class4"
Метод f_func3() определен только в классе Class3, поэтому метод наследуется от этого класса. Метод f_func4(), определенный в классе Class3, переопределяется в производном классе. Если метод найден в производном классе, то вся иерархия наследования просматривается не будет.
Если необходимо получить перечень базовых классов, то можно воспользоваться атрибутом __base__. В качестве значения атрибут возвращает кортеж. В качестве примера выведем классы для класса Class4 из предыдущего примера.
print Class4.__bases__
Выведет:
(, )
- Python-рецепты. Словари
- Игровой автомат Slot-o-Pol Deluxe - выиграй по крупному в Гусар казино
- Программирование Web-клиента на языке Python
- Игровой автомат Dracula - в казино Вулкан Старс крупно выиграй
- Как интернет способен помочь в поиске работы?
- Игровой слот Stickers - в аппараты НетЕнт играть в Джойказино казино
- Joycasino (Джойказино) - рабочее зеркало
> Метод f_func2() также определен в двух классах - Class2 и Class2.
ошибочка. должно быть "Class2 и Class3"
ViT, спасибо! быстренько исправил.
Только вот пример-то для Python 2, а не Python 3. В 3-ке вывод был бы следующим:
Метод f_func1() класса Class3
Метод f_func2() класса Class2
Метод f_func3() класса Class3
Метод f_func4() класса Class4
print Class4.__bases__
Должен выдавать не пустой кортеж, а (, )
А, видимо, косяк на сайте.
Еще одна попытка
class '__main__.Class2'>,