estoy encontrando a mí mismo escribiendo un montón de clases con constructores como este:Mejorar __init__ donde args se asignan directamente a los miembros
class MyClass(object):
def __init__(self, foo, bar, foobar=1, anotherfoo=None):
self.foo = foo
self.bar = bar
self.foobar = foobar
self.anotherfoo = anotherfoo
Es un mal olor código? ¿Python ofrece una forma más elegante de manejar esto?
Mis clases e incluso algunos de los constructores son más que solo lo que he mostrado, pero normalmente tengo una lista de argumentos pasados al constructor que acaban siendo asignados a miembros con nombres similares. Hice algunos de los argumentos opcionales para señalar el problema de hacer algo como:
class MyClass(object):
def __init__(self, arg_dict):
self.__dict__ = arg_dict
A menos que prevea que la lista de argumentos crece mucho más tiempo que eso o necesita un conjunto arbitrario de argumentos siempre convertidos a attribs (en cuyo caso haré cumplir el uso de kwargs), no veo nada de malo en eso. Hago lo mismo en la mayoría de los casos, se lee bien y es una prerrogativa prevista de un __init__ de todos modos. No creo que huele en absoluto. –
Ver también http://stackoverflow.com/questions/3652851. – FMc