@ekolodenets

Python. Почему не работает декоратор в классе?

Просто так код работает.
def typed(func):
    def wrapper(*args):
        print("in decor")
        return func(*args)
    return wrapper

@typed
def add(a: int, b: int) -> str:
    return a + b

if __name__ == '__main__':

    a = 4
    b = 2
    result = add(a, b)
    print(result)

Как только его вставляю в класс - выдает ошибку:
TypeError: add() takes 2 positional arguments but 3 were given
class MyClass:
    def typed(func):
        def wrapper(*args):
            print("in decor")
            return func(*args)
        return wrapper

    @typed
    def add(a: int, b: int) -> str:
        return a + b

if __name__ == '__main__':

    a = 4
    b = 2
    result = MyClass().add(a, b)
    print(result)

Хотя все остается то же самое
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
def add(self, a: int, b: int) -> str:
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
в классе первый аргумент это текущий экземпляр класса. У любой функции. Всегда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы