Parece que a menudo __init__
métodos son similares a esto:Python __init__ setattr en argumentos?
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
¿Hay alguna manera de convertir los argumentos en una lista (sin recurrir a *args
o **kwargs
) y luego usando setattr
para establecer las variables de instancia, con el nombre del parámetro y el argumento pasado? Y tal vez cortar la lista, p. deberías al menos cortarlo en [1:]
porque no quieres self.self
.
(en realidad supongo que tendría que ser un diccionario para contener el nombre y valor)
así:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Gracias!
En respuesta a la respuesta del desconocido, encontré que esto funcione:
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(dict([(k, v) for k, v in locals().iteritems() if k != 'self']))
o
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(locals())
del self.__dict__['self']
No
lástima ..
víctima http://stackoverflow.com/questions/1389180/python-automatically-initialize-instance-variables – SilentGhost
vea también: http://stackoverflow.com/questions/739625/setattr-with-kwargs-pythonic-or-not – Imran