Python: аккуратно распаковать аргументы init в переменные-члены
Рассмотрим пример класса ниже:
class Foo(object):
def __init__(self, a=2, b=0, c=1, d=42):
self.a = a
self.b = b
self.c = c
self.d = d
Есть ли чистый способ распаковать kwargs в переменные-члены? Возможно, этот пример тривиален, но представьте себе конструктор с 17 переменными-членами с длинными именами, такими как redundant_data_structure_that_we_should_probably_remove
, Я в курсе setattr()
Например, в этом другом вопросе, но я не хочу принимать **kwargs в конструкторе, то есть я хотел бы распаковать только определенные члены vars a
, b
, c
, а также d
,
1 ответ
Решение
Я смотрел на это раньше и пришел к выводу, что нет хорошего способа автоматизировать шаблон.
К счастью, вам обычно это не нужно:
- Если у вас есть 17 переменных-членов, переданных в
__init__
Пришло время рефакторинга. - Если ваш класс - это всего лишь пространство имен / пакет данных, не используйте класс в первую очередь.
Если вы хотите поэкспериментировать с библиотеками, чтобы удалить это дублирование, посмотрите python-fields
или чуть менее волшебным attrs
,