Присвоить много аргументов в конструкторе

Конструктор принимает много аргументов. Надо присвоить их одноименным переменным класса. Как это сделать более правильно/короче/красивше, чем перечислять подряд?

class X:
  def __init__(self, height, width, opacity, alpha, beta, gamma, theta):
    self.height = height
    self.width = width
    self.opacity = opacity
    # и т.д.

Ответы (3 шт):

Автор решения: Danis
class X:
    def __init__(self, **kwargs):
        dict_ = {"height": 0}
        self.__dict__ = kwargs 
        for key, value in dict_.items():
            self.__dict__[key] = self.__dict__.get(key, value) 

только место:

X(0, 1, 2) 

надо писать:

X(height = 0, width = 1, opacity = 2) 

Либо

class X:
    def __init__(self, **kwargs):
        dict_ = {параметр: значение по умолчанию}
        list_ = [параметры без значения по умолчанию]
        for key in list_:
            self.__dict__[key] = kwargs[key] 
        for key, value in dict_.items():
            self.__dict__[key] = self.kwargs.get(key, value)
→ Ссылка
Автор решения: Дмитрий Плаксунов

Лучшим способом является именно перечисление и явное присвоение каждого аргумента.

class X:
  def __init__(self, height, width, opacity, alpha, beta, gamma, theta):
    self.height = height
    self.width = width
    self.opacity = opacity

Так при работе в IDE в сможете быстро понять где именно появляется нужный вам параметр.

→ Ссылка
Автор решения: roddar92

В python есть две переменные: args и kwargs. В первом случае аргументы будут позиционными, а во втором - по умолчанию.

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


def __init__(self, **kwargs):
    self.height = kwargs.get('height', 0)
    # etc.
→ Ссылка