Квот третий день чинит датчики в западном коллекторе. Датчик у него собран из двух готовых кусков: один пишет журнал, другой помнит последние ответы. Оба куска наследуют общий Device, который при создании регистрирует устройство в сети Подземья. Включаешь один датчик, а в сети появляются два.
class Device:
def __init__(self):
print("Device: регистрирую в сети")
class Logged(Device):
def __init__(self):
print("Logged: открываю журнал")
Device.__init__(self)
class Cached(Device):
def __init__(self):
print("Cached: завожу кэш")
Device.__init__(self)
class Sensor(Logged, Cached):
def __init__(self):
Logged.__init__(self)
Cached.__init__(self)
Sensor()
Logged: открываю журнал
Device: регистрирую в сети
Cached: завожу кэш
Device: регистрирую в сети
В прошлом уроке ты видел, как Python ищет атрибут: сначала дескрипторы данных у класса, потом словарь объекта, потом всё остальное у класса. Слово «у класса» там означало «у класса и у его предков по порядку». Пока у каждого класса был один родитель, порядок был прямой линией до object. С двумя родителями линия ветвится, и Python должен выпрямить её сам. Сегодня ты узнаешь, как он это делает, почему super() зовёт не родителя, и соберёшь для арсенала свой singledispatch, который выбирает реализацию по тому же порядку.
урок из курса
Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.