Sembra che spesso __init__
metodi sono simili a questo:Python __init__ setattr su argomenti?
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
C'è qualche modo per trasformare gli argomenti in una lista (senza ricorrere a *args
o **kwargs
) e quindi utilizzando setattr
per impostare le variabili di istanza, con la nome del parametro e argomento passato? E magari taglia l'elenco, ad es. avresti bisogno almeno di affettarlo a [1:]
perché non vuoi self.self
.
(in realtà credo che avrebbe bisogno di essere un dizionario per contenere il nome e il valore)
come questo:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Grazie!
In risposta alla risposta di Unknown, ho trovato questo lavoro:
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']
Non
troppo male ..
vittima http://stackoverflow.com/questions/1389180/python-automatically-initialize-instance-variables – SilentGhost
vedere anche: http://stackoverflow.com/questions/739625/setattr-with-kwargs-pythonic-or-not – Imran