Mediummethods

Чем @staticmethod/classmethod от instance method?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Instance methoddef m(self, ...), получает instance как первый аргумент. Class method@classmethod def m(cls, ...), получает класс. Static method@staticmethod def m(...), без self/cls.

class Temperature:
    ABSOLUTE_ZERO = -273.15

    def __init__(self, celsius):
        self.celsius = celsius

    def to_fahrenheit(self):           # instance method
        return self.celsius * 9/5 + 32

    @classmethod
    def from_fahrenheit(cls, f):       # alternative constructor
        return cls((f - 32) * 5/9)

    @staticmethod
    def is_valid(celsius):             # helper, без доступа к cls/self
        return celsius >= Temperature.ABSOLUTE_ZERO
  • Instance method — для работы с данными instance;
  • classmethod — alternative constructors, factory, polymorphic creation;
  • staticmethod — utility functions, сгруппированные с классом.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.