Присвоить много аргументов в конструкторе
Конструктор принимает много аргументов. Надо присвоить их одноименным переменным класса. Как это сделать более правильно/короче/красивше, чем перечислять подряд?
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.