Mediumclassmethod
Чем classmethod отличается от staticmethod?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
classmethod — получает класс как первый аргумент (cls). staticmethod — без self/cls, просто функция в namespace класса.
class Date:
def __init__(self, year, month, day):
self.year, self.month, self.day = year, month, day
@classmethod
def from_string(cls, s): # alternative constructor
y, m, d = map(int, s.split('-'))
return cls(y, m, d) # cls → полиморфизм (подкласс вернёт свой тип)
@staticmethod
def is_valid(s): # helper, без доступа к cls/self
try:
Date.from_string(s)
return True
except ValueError:
return False
Date.from_string('2024-01-01')
Date.is_valid('2024-01-01')- classmethod — alternative constructors, factory methods, polymorphic creation;
- staticmethod — utility functions, логически сгруппированные с классом;
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.