⚡ Краткий справочник
class A: x = 1 — атрибут класса.
self.x = 1 — атрибут объекта.
@classmethod def m(cls): ... — метод класса.
@staticmethod def m(): ... — статический метод.
__str__ — строка для пользователя.
__repr__ — строка для разработчика.
obj.__dict__ — словарь атрибутов объекта.
Общий синтаксис
class ClassName:
class_attribute = value # атрибут класса
def __init__(self, value):
self.instance_attribute = value # атрибут объекта
def method(self): # обычный метод
...
@classmethod
def class_method(cls): # классовый метод
...
@staticmethod
def static_method(): # статический метод
...
def __str__(self) -> str: # строковое представление
return "..."
def __repr__(self) -> str: # техническое представление
return "..."
Сравнение типов методов
| Тип метода |
Декоратор |
Первый аргумент |
Доступ |
Когда использовать |
| Обычный метод |
— |
self |
К полям и методам объекта |
Когда метод работает с конкретным экземпляром |
| Классовый метод |
@classmethod |
cls |
К полям и методам класса |
Когда метод работает с классом или создаёт объекты по шаблону |
| Статический метод |
@staticmethod |
— |
— |
Когда функция логически относится к классу, но не использует ни self, ни cls |
Способы доступа к атрибутам
| Запись | Что делает | Пример |
ClassName.attr | Чтение/изменение атрибута класса | Book.library_name |
obj.attr | Чтение: сначала объект, потом класс; запись: только в объект | book.library_name |
self.attr | Чтение атрибута объекта или класса внутри метода | self.title |
obj.__dict__ | Словарь собственных атрибутов объекта | book.__dict__ |
ClassName.__dict__ | Словарь атрибутов и методов класса | Book.__dict__ |
Магические методы
| Метод | Когда вызывается | Что должен делать |
__init__(self, ...) | При создании объекта | Инициализировать атрибуты объекта |
__str__(self) | print(obj), str(obj) | Вернуть читаемую строку для пользователя |
__repr__(self) | repr(obj), вывод в коллекциях | Вернуть техническое представление, желательно пригодное для воссоздания объекта |
Параметры и аннотации
| Параметр | Тип | Описание |
self | экземпляр класса | Ссылка на текущий объект в обычном методе |
cls | класс | Ссылка на класс в @classmethod |
-> str | аннотация | Подсказка о типе возвращаемого значения (не влияет на выполнение) |
Проверить по документации: аннотации типов в таблице выходят за рамки исходного материала. Подробнее см.
typing.
Проверить по документации: встроенные функции
classmethod и
staticmethod описаны в
Built-in Functions.