🔖 Справочник команд и синтаксиса

⚡ Краткий справочник

  • from abc import ABC, abstractmethod — база для абстрактных классов.
  • @abstractmethod — метод, который обязан быть реализован в наследнике.
  • class MyError(Exception): — создание пользовательского исключения.
  • raise MyError("message") — выброс исключения.
  • __str__, __iter__, __next__ — ключевые dunder-методы.

Синтаксис абстрактных классов

from abc import ABC, abstractmethod


class MyAbstractClass(ABC):
    """Docstring explaining the contract."""

    @abstractmethod
    def required_method(self) -> None:
        """Describe what the subclass must do."""
        pass


class ConcreteClass(MyAbstractClass):
    def required_method(self) -> None:
        print("Implemented")

Модуль abc

КонструкцияНазначениеПример
ABCБазовый класс для абстрактных классовclass Shape(ABC):
@abstractmethodДекоратор абстрактного метода@abstractmethod def area(self):
@abstractclassmethodАбстрактный классовый метод (устарел, см. заметку)
@abstractstaticmethodАбстрактный статический метод (устарел)
Проверить по документации: декораторы @abstractclassmethod и @abstractstaticmethod объявлены устаревшими; используйте сочетание @classmethod / @staticmethod с @abstractmethod. См. abc.abstractmethod.

Синтаксис пользовательских исключений

class MyError(Exception):
    """Explain when this error is raised."""
    pass


class ValidationError(ValueError):
    """Raised for invalid user input."""
    pass

Исключения

КонструкцияНазначениеПример
class CustomError(Exception):Базовое пользовательское исключениеraise CustomError("msg")
class InputError(ValueError):Исключение, связанное со значениемexcept ValueError: тоже поймает
super().__init__(msg)Передача сообщения базовому классуprint(e) работает
try ... except CustomError as e:Точечная обработка ошибкиprint(e.age)

Магические методы

МетодНазначениеПример вызова
__str__Строковое представление для пользователяprint(obj)
__repr__Строковое представление для разработчикаrepr(obj)
__len__Длина объектаlen(obj)
__eq__Сравнение на равенствоobj1 == obj2
__add__Сложение объектовobj1 + obj2
__contains__Проверка вхожденияitem in obj
__call__Вызов объекта как функцииobj()
__bool__Преобразование в boolbool(obj)
__iter__Возвращает итераторfor x in obj
__next__Следующее значение итератораnext(it)

Соглашения по именованию

СущностьСоглашениеПример
Абстрактный классИмя существительное, часто базовоеShape, PaymentProcessor
ИсключениеСуффикс ErrorInvalidSizeError
Абстрактный методГлагол / действиеarea(), pay()