кажется, что часто __init__
методы похожи на это:Python __init__ setattr по аргументам?
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']
Не так уж плохо ..
повторов Http://stackoverflow.com/questions/1389180/python-automatically-initialize-instance-variables – SilentGhost
см. также: http://stackoverflow.com/questions/739625/setattr-with-kwargs-pythonic-or-not – Imran