Python декоратор для метода класса для обновления переменной класса - PullRequest
0 голосов
/ 11 апреля 2020

как я могу реализовать декоратор в python и использовать его в классе Python, например, в одном из методов класса, чтобы он мог изменять переменную класса (результаты) во время выполнения? в коде декоратор должен добавить материал в словарь результатов, когда do_something вызывается и завершает работу

import mydecorator 
class foo:
    def __init__(self):
        self.results = {}

    @mydecorator
    def do_something():
        # do something

1 Ответ

0 голосов
/ 11 апреля 2020

То, на что вы ссылаетесь, называется установщиками. Сеттеры по сути являются методами, используемыми для установки значений переменных экземпляра объекта. Чтобы добиться этого с помощью декораторов, необходимо соблюдать определенные правила:

  • Имя метода должно совпадать с переменной.
  • Декоратор @name.setter должен предшествовать его определению.

Вы можете легко реализовать установщик в созданном вами классе:

class foo:
    def __init__(self):
        self.results = {}

    @results.setter
    def results(self,dictIn):
        self.results = dictIn

Как видите, отсутствие создания установщика в приведенном выше примере не сильно изменилось бы, но в некоторых случаях вы можете захотеть изменить поведение при изменении значения элемента данных. Это в основном использование сеттеров.

...