@classmethod передает класс cls в качестве первого аргумента вместо экземпляра. Его часто используют для фабричных методов.
Пример
class User:
def __init__(self, name: str) -> None:
self.name = name
@classmethod
def from_email(cls, email: str) -> User:
return cls(email.split("@")[0])
Разбор
Суммируя:
classmethod работает на уровне класса.
- Это удобно для альтернативных конструкторов.
- Для этого не требуется уже созданный экземпляр.
Итог
@classmethod передает класс cls в качестве первого аргумента вместо экземпляра.