Обнаружение ошибок в Python‑классе (пример 2)

Синтаксис допустим, но staticmethod ошибочно ожидает self, а property — лишний a. classmethod работает с именем self, хотя по соглашению его нужно назвать cls. Свойство читается без скобок.

Короткий ответ

Что ответить на собеседовании

Синтаксис допустим, но staticmethod ошибочно ожидает self, а property — лишний a. classmethod работает с именем self, хотя по соглашению его нужно назвать cls. Свойство читается без скобок.

Подробный разбор

Ответ с пояснениями

Условие

Найдите логические и синтаксические недочёты в приведённом ниже фрагменте кода на Python.


class A:
    attr = 1
    @classmethod
    def cls_meth(self, a):
        return self.attr + a

    @staticmethod
    def stc_meth(self, a):
        return a * a

    @property
    def prop(self, a):
        return self.attr

A.cls_meth(1)
A.stc_meth(1)
A.prop()

a = A()

a.cls_meth(1)
a.stc_meth(1)
a.prop()

Ответ

Синтаксис допустим, но staticmethod ошибочно ожидает self, а property — лишний a. classmethod работает с именем self, хотя по соглашению его нужно назвать cls. Свойство читается без скобок.

Первый A.cls_meth(1) возвращает 2. Затем A.stc_meth(1) вызывает TypeError из-за отсутствующего второго аргумента, и дальнейшие строки не выполняются.

Исправления:

@classmethod
def cls_meth(cls, a):
    return cls.attr + a

@staticmethod
def stc_meth(a):
    return a * a

@property
def prop(self):
    return self.attr

После этого класс и экземпляр могут вызывать первые два метода, а свойство читается как a.prop. A.prop — объект-дескриптор property, не вызываемая функция с готовым экземпляром.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее