Бесплатный урок · Python Core

Один класс.
Три вида методов.

Разберитесь с self и cls, проверьте себя и попробуйте повторение. Без аккаунта и оплаты. Пробный результат не меняет прогресс курса.

  1. 01 / Теория
  2. 02 / Практика
  3. 03 / Карточки

Кому нужен контекст?

Обычный метод при вызове через объект получает этот объект в self. Он подходит для действий с состоянием конкретного экземпляра.

@classmethod получает класс в cls. Например, фабрика разбирает строку и создаёт объект через cls(...). При вызове на подклассе получится экземпляр подкласса.

@staticmethod не получает ни self, ни cls автоматически. Это функция, помещённая в класс по смыслу. Если связи с классом нет, обычная функция модуля проще.

class User:
    def __init__(self, name):
        self.name = name

    def greeting(self):
        return f"Hello, {self.name}"

    @classmethod
    def from_csv(cls, row):
        return cls(row.split(",")[0].strip())

    @staticmethod
    def valid_name(name):
        return bool(name.strip())

user = User.from_csv("Alice,developer")
print(user.greeting())  # Hello, Alice
print(User.valid_name("Alice"))  # True

Первоисточники: classmethod и staticmethod в документации Python.