Кажется, что часто __init__
методы похожи на это:
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
Есть ли способ превратить аргументы в список (без обращения к *args
или **kwargs
), а затем использовать setattr
для установки переменных экземпляра с указанием имени параметра и переданного аргумента? И, возможно, нарезать список, например, вам нужно хотя бы нарезать его на [1:]
, потому что вы не хотите self.self
.
(на самом деле, я думаю, это должен быть словарь для хранения имени и значения)
как это:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Спасибо!
Отвечая на ответ Неизвестного, я обнаружил, что это работает:
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(dict([(k, v) for k, v in locals().iteritems() if k != 'self']))
или
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(locals())
del self.__dict__['self']
Не так уж плохо ..