Абстрактный класс ABC

Абстрактный класс – класс, содержащий один и более абстрактных методов. Абстрактный метод – метод, который объявлен, но не реализован. Абстрактный класс не может быть инстанциирован (создан его экземпляр). Нужно наследовать этот класс и реализовать (переопределить) все абстрактные методы, и только после этого можно создавать экземпляры такого наследника. В Python нет синтаксической поддержки абстрактных классов, но…

Decimal числа. Отличия от float

После рассказа про float меня просили рассказать про Decimal. Узнаем же, что это за зверь, как он устроен внутри и как с ним работать. Итак, Decimal – это класс из стандартного модуля decimal. Он представляет собой число с плавающей точкой, как и float. Да, именно с плавающей, потому что некоторые, я слышал, думают, что это…

Переопределение свойств класса

В заметке расскажу, как переопределить свойства (@property) в классе-наследнике. Как оказалось, это не тривиально и существуют несколько вариантов, различных между собой. Допустим есть базовый класс со свойством: Ситуация А. В классе-наследнике мы хотим переопределить ТОЛЬКО сеттер, чтобы он делал что-то еще помимо того, что умеет в базовом классе. Это не так и тривиально: Ситуация B.…

Перезагрузка модулей Python

Пусть в файле my_module.py написано определение класса: Пишем такой код в другом файле: Ответ – True. Система модулей Python только единожды будет запускать каждый импорируемый файл. Второй import не возымеет действия, и класс А будет тем же, что и был раньше. Бонус: если вам нужно принудительно перезагрузить модуль – воспользуйтесь функцией reload из importlib. Попробуем.…

Умножение списка на число

Студент Макс узнал, что в Python умножать можно не только числа, но и другие объекты, например, строку на число: «Вау!» — подумал Макс — «А что если умножить список на число?»: Значит можно создать двумерный массив очень кратко и элегантно? Заполнить его: Макс ожидал получить: А вышло: 😯 Как же так?! Дело в том, что…