Использование декоратора внутри класса и вызов объекта - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть класс с функцией с именем decorator_func и другой функцией с именем name_me. Как мне украсить функцию name_me другой функцией из класса?

Вот что я пробовал до сих пор:

class Test :
    
    def decorator_func(fun):
        def disp_fun(name):
            return ("hello there ,") + fun(name)
        return disp_fun
@decorator_func
def name_me(name):
      return name
    
print name_me("abhi")

obj = Test()
obj.decorator_func()

Описание кода приведено на рисунке ниже. Анаконда Юпитерская лаборатория используется для выполнения кода

Как удалить эту ошибку?

1 Ответ

0 голосов
/ 04 сентября 2018

Проблема с вашим кодом в том, что вы декорируете функцию name_me с помощью метода из класса Test.

Вы можете переместить decorator_func из класса Test, тогда ваш код будет выглядеть так:

def decorator_func(fun):
    def disp_fun(name):
        return ("hello there, ") + fun(name)
    return disp_fun

@decorator_func
def name_me(name):
  return name

print name_me("abhi")

Мы создаем экземпляр класса Test и украшаем функцию name_me методом экземпляра, например так:

class Test :
    def decorator_func(self, fun):
        def disp_fun(name):
            return ("hello there, ") + fun(name)
        return disp_fun

# Create a instance of the Test class
obj = Test()

@obj.decorator_func
def name_me(name):
    return name

print name_me("abhi")
...