Как добавить атрибут в класс до __init__? - PullRequest
0 голосов
/ 17 мая 2019

Вопрос

У меня есть модуль Python, который создает экземпляры многих других модулей во время выполнения.Другие модули указываются через внешний файл конфигурации, в котором также содержатся все аргументы / значения для каждого модуля __init__.

. Я хотел бы добавить один и тот же атрибут ко всем новым экземплярам, ​​но я не хочудобавить новый аргумент к __init__ во всех моих классах.Как я могу это сделать?

Мои мысли

Одно из возможных решений: на лету я могу добавить новый аргумент к __init__, каким-то образом манипулируя __init__ атрибут на модуле.Затем я могу передать ему атрибут, который я хочу добавить во всех экземплярах.

Я почти уверен, что это нарушает дзен Python.При этом мне любопытно, как можно это сделать?

1 Ответ

1 голос
/ 17 мая 2019

Вы можете перебрать параметр **kwargs __init__ и использовать __setattr__ для автоматической установки любого нового переданного параметра.Пример:

class Foo:
    def __init__(self, **kwargs):
        for key in kwargs:
            self.__setattr__(key, kwargs[key])

Вам нужно только слепо добавить эти две строки плюс аргумент ** kwargs к вашим классам, затем:

f = Foo(name="bar")
print(f.name)

Вывод:

bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...