Back to Blog

🧠 Когда использовать @classmethod в Python

Anastasiia Berest 2 min read

Используй @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

Anastasiia Berest

Senior Web UI Engineer

I'm a web development passionate about creating meaningful digital experiences.