Множественное наследование и MRO
Разберитесь в множественном наследовании и MRO Python: C3-линеаризации.
«Множественное наследование и MRO» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Введение
Синтаксис множественного наследования
class A:
def hello(self): return 'A'
class B:
def world(self): return 'B'
class C(A, B): pass
c = C()
print(c.hello(), c.world())Порядок разрешения методов (MRO)
class A:
def greet(self): return 'A'
class B:
def greet(self): return 'B'
class C(A, B): pass
print(C().greet()) # A wins
print(C.__mro__)Линеаризация C3
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print([c.__name__ for c in D.__mro__])Ромбовидное наследование
class A:
def __init__(self): print('A')
class B(A):
def __init__(self): super().__init__(); print('B')
class C(A):
def __init__(self): super().__init__(); print('C')
class D(B, C):
def __init__(self): super().__init__(); print('D')
D()Примеси
class JSONMixin:
def to_json(self):
import json
return json.dumps(vars(self))
class User(JSONMixin):
def __init__(self, name, age): self.name,self.age=name,age
print(User('Alice', 30).to_json())Правила проектирования примесей
class LoggingMixin:
def log(self, msg): print(f'[{self.__class__.__name__}] {msg}')
class Service(LoggingMixin):
def run(self): self.log('running')
Service().run()super() при множественном наследовании
class Base:
def action(self): return 'Base'
class A(Base):
def action(self): return 'A->' + super().action()
class B(Base):
def action(self): return 'B->' + super().action()
class C(A, B):
def action(self): return 'C->' + super().action()
print(C().action())type() для динамического создания классов
def hello(self): return 'hello'
MyClass = type('MyClass', (object,), {'hello': hello})
print(MyClass().hello())Проверка MRO
class A: pass
class B(A): pass
class C(B): pass
import inspect
print([c.__name__ for c in inspect.getmro(C)])Когда следует избегать множественного наследования
# Prefer:
class User:
def __init__(self, name, logger):
self.name = name
self.logger = logger # composition
print('composition preferred')Быстрая проверка
Итоги
Продолжайте
Часто задаваемые вопросы
Урок «Множественное наследование и MRO» бесплатный?
Да — полный текст урока «Множественное наследование и MRO» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Множественное наследование и MRO»?
Разберитесь в множественном наследовании и MRO Python: C3-линеаризации. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Множественное наследование и MRO»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Одиночное наследование
- Переопределение методов и super()
- Множественное наследование и MRO
- Полиморфизм и утка типизация