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

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

​​Unicode по имени

Вы знали, что в строке Python 3 можно вставлять символы по их названию в юникод-таблице? Допустим нужны вам стрелки: Найти юникод символы и их имена удобно с помощью онлайн-сервисов.  Да, конечно, в Python 3 вы можете прямо в код вставлять любые юникод символы без их кодов и имен. Но профессиональнее – вставлять символы по именам,…

​​collections.deque – очередь Python

deque – коллекция двухсторонней очереди, которая похожа на список, за исключением того, что добавлять и удалять элементы можно либо в начало (слева), либо в конец (справа). Реализована обычно через двусвязный список. Благодаря этому операции добавления или удаления элемента с любого конца deque имеют сложность O(1). Доступ к произольному элементу – O(n). Создание: Методы Метод append(x)…

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

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

Узнать тип type() и проверить тип isinstance()

В Python у нас утиная динамическая типизация, поэтому бывает что нужно узнать тип переменной. Функция type() возвращает тип аргумента или, учитывая, что в Python – все класс, то класс аргумента. Результат можно сравнить с известным типом: Можно создать экземпляр объекта того же класса, что и переменная: ⚠️ Нужно знать! type() не принимает во внимание наследование.…