Использование украшать из другого класса в Python 2.7 - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь вызвать декоратор из другого класса в Python.Ниже приведен код

file_1.py

class ABC:
    def decorate_me(func):
        def wrapper():
            print "Hello I am in decorate_me func"
            print "Calling decorator function"
            func()
            print "After decorator"
        return wrapper

file_2.py

from file_1 import ABC
@ABC.decorate_me
def test():
    print "In test function ."

test()

выход

TypeError: unbound method decorate_me() must be called with ABC instance as first argument (got function instance instead)

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Поскольку ваш декоратор не использует self, похоже, что обертка может быть статическим методом.Если вы объявите decorate_me как таковой, вы можете использовать его с @ABC.deocarate_me.

Если вы хотите использовать этот декоратор в других классах, рассмотрите возможность использования класса с декоратором в качестве базового класса, который наследуют ваши другие классыот.Другой вариант - вообще не помещать своего декоратора в класс.

0 голосов
/ 11 июня 2018

Попробуйте следующий код в file_2.py:

from file_1 import ABC
dec = ABC.decorate_me
@dec
def test():
    print("In test function .")

test()

Вывод:

Hello I am in decorate_me func
Calling decorator function
In test function .
After decorator
0 голосов
/ 11 июня 2018

Как подсказывает ошибка, ваш декоратор - это метод;попробуйте сделать его статической функцией:

class ABC:
    @staticmethod
    def decorate_me(func):
        ...

Но вопрос в том, почему вы помещаете его в ABC?

...