Pythonic способ инициализировать объект с большим количеством параметров и значением по умолчанию

Мне нужно создать класс, для которого требуется множество параметров.

class Line: def __init__(self, name, nb = None, price_unit = None, total = None, unit = None, time = None, session = None ): 

Каждый атрибут получит одно и то же имя и то же значение, что и параметр, переданный __init __ () .

Поэтому, конечно, я мог бы сделать:

 class MyClass: def __init__(self, name, nb = None, price_unit = None, total = None, unit = None, time = None, session = None ): self.name = name self.nb = nb self.price = price self.price_unit = price_unit self.total = total self.unit = unit self.time = time self.session = session 

Но это действительно тяжелая нотация и не кажется мне для меня питонической. Знаете ли вы более питоническую манеру?

Поскольку вы устанавливаете значения по умолчанию для всех аргументов ключевого слова None , вы можете сделать более читаемым:

 class MyClass: def __init__(self, name, **kwargs): self.name = name for attr in ('nb', 'price_unit', 'total', 'unit', 'time', 'session'): setattr(self, attr, kwargs.get(attr)) 

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

 class MyClass: def __init__(self, name, nb=None, price_unit=None, total=None, unit=None, time=None, session=None): ... 

В очень путинском смысле это может быть:

 class MyClass: def __init__(self, name, **kwargs): self.name = name self.__dict__.update(kwargs) 

Вы можете использовать * args ie

 def __init__(self, *args): self.args = args