Встречается на собеседованиях • сегодня

В чем разница между @staticmethod и @classmethod

@staticmethod и @classmethod — это декораторы в Python для создания методов, которые не привязаны к экземпляру класса. Но они имеют ключевые различия:

1. @staticmethod (Статический метод)

- Не получает неявных аргументов (ни self, ни cls)

- Не имеет доступа к классу или его экземплярам

- Ведет себя как обычная функция, но принадлежит пространству имен класса

Вызывается как от класса, так и от экземпляра

Пример:

text
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b  # Не знает о классе
    
# Использование
print(MathUtils.add(5, 3))  # 8
obj = MathUtils()
print(obj.add(2, 2))        # 4

2. @classmethod (Метод класса)

- Получает класс в качестве первого аргумента (обычно называют cls)

- Имеет доступ к классу и может изменять его состояние

- Может использоваться как альтернативный конструктор

Вызывается как от класса, так и от экземпляра

Пример:

text
class Person:
    count = 0
    
    def __init__(self, name):
        self.name = name
        Person.count += 1
    
    @classmethod
    def get_count(cls):
        return cls.count  # Имеет доступ к классу
    
    @classmethod
    def from_string(cls, string_data):
        # Альтернативный конструктор
        name = string_data.split('-')[0]
        return cls(name)  # Создает новый экземпляр

# Использование
person1 = Person("Alice")
person2 = Person.from_string("Bob-25")

print(Person.get_count())  # 2 (обращается к классу)
print(person1.get_count()) # 2 (все равно получает класс)

Когда что использовать:

@staticmethod — когда метод не нуждается в доступе к классу или экземпляру (математические операции, утилиты)

@classmethod — когда нужно работать с классом как с целым (подсчет экземпляров, альтернативные конструкторы)

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы