Wydaje się, że często __init__
metody są podobne do tego:Python __init__ setattr na argumenty?
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
Czy istnieje jakiś sposób, aby włączyć argumenty do listy (bez uciekania się do *args
lub **kwargs
), a następnie za pomocą setattr
ustawić zmienne instancji, przy czym nazwa parametru i przekazany argument? I może pokroić listę, np. musisz go przynajmniej przekroić na [1:]
, ponieważ nie chcesz self.self
.
(w rzeczywistości myślę, że to musi być słownikiem posiadać nazwę i wartość)
tak:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Dzięki!
Reagowanie na odpowiedź Bezimiennego, znalazłem to do pracy:
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(dict([(k, v) for k, v in locals().iteritems() if k != 'self']))
lub
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(locals())
del self.__dict__['self']
Nie jest tak źle ..
dupe http://stackoverflow.com/questions/1389180/python-automatically-initialize-instance-variables – SilentGhost
zobacz także: http://stackoverflow.com/questions/739625/setattr-with-kwargs-pythonic-or-not – Imran