Используй @classmethod, когда метод:
1️⃣ Работает с самим классом, а не с конкретным объектом
Он получает cls, а не self.
class Example:
count = 0
@classmethod
def get_count(cls):
return cls.count
2️⃣ Создаёт объект альтернативным способом (очень частый случай)
class Employee:
def __init__(self, name):
self.name = name
@classmethod
def from_string(cls, data):
name = data.split('-')[0]
return cls(name)
📌 Здесь cls(…) создаёт новый объект
3️⃣ Использует/изменяет общие данные класса (статические атрибуты)
👉 Например, счётчик:
class Pizza:
counter = 0
@classmethod
def increment(cls):
cls.counter += 1
4️⃣ Фабричные методы (factory methods)
👉 Когда у тебя есть “готовые варианты”:
class Pizza:
def __init__(self, ingredients):
self.ingredients = ingredients
@classmethod
def hawaiian(cls):
return cls(['ham', 'pineapple'])
❌ Когда НЕ нужен @classmethod
Используй обычный метод (self), если:
- работаешь с данными конкретного объекта
- не создаёшь новый объект
def get_price(self):
return self.cost * 2
Anastasiia Berest
Senior Web UI Engineer
I'm a web development passionate about creating meaningful digital experiences.