Как использовать декоратор метода класса - PullRequest
0 голосов
/ 01 мая 2020

Когда я проектирую класс, я написал функцию-член класса в качестве декоратора

    def switchWindow(self, win: str):
        def actual_decorator(func):
            self.browser.switch_to.window(self.windowsHandles[win])

            def inner():
                func()
            return inner
        return actual_decorator

декоратор используется для изменения eviroment для другой функции-члена, прежде чем они выполняются, однако, когда я использовал декоратор над функцией-членом:

    @switchWindow(win="crop")
    def test_cropFunction(self):
        pass

В среде IDE возникла ошибка, подобная этой:

    @switchWindow(win="crop") TypeError: switchWindow() missing 1 required positional argument: 'self'

Я запутался в ошибке, но затем переписал декоратор с помощью добавьте «я» перед декоратором, но это также неправильно:

    @self.switchWindow(win="crop") NameError: name 'self' is not defined

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 01 мая 2020

Я переместил функцию декоратора из класса и внес некоторые изменения, например:

def switchWindow(win: str):
    def actual_decorator(func):
        print(win)

        def inner(self):
            self.browser.switch_to.window(self.windowsHandles[win])
            func(self)
        return inner
    return actual_decorator

и теперь она работает!

...