Supongamos que tenemos una clase con un constructor (u otra función) que toma un número variable de argumentos y los establece como atributos de clase condicionalmente.Cómo se pueden establecer atributos de clase a partir de argumentos variables (kwargs) en python
Podría establecerlos manualmente, pero parece que los parámetros variables son lo suficientemente comunes en python como para que haya una expresión común para hacer esto. Pero no estoy seguro de cómo hacer esto de forma dinámica.
Tengo un ejemplo que usa eval, pero eso no es seguro. Quiero saber la forma correcta de hacer esto, ¿tal vez con lambda?
class Foo:
def setAllManually(self, a=None, b=None, c=None):
if a!=None:
self.a = a
if b!=None:
self.b = b
if c!=None:
self.c = c
def setAllWithEval(self, **kwargs):
for key in **kwargs:
if kwargs[param] != None
eval("self." + key + "=" + kwargs[param])
Parece que estas preguntas son similares: http://stackoverflow.com/questions/3884612/automatically-setting-class-member- variables-in-python http://stackoverflow.com/questions/356718/how-to-handle-constructors-or-methods-with-a-different-set-or-type-of-argument http: // stackoverflow. com/questions/1446555/python-decorator-to-ensure-that-kwargs-are-correct así que parece que lo que quiero es quizás esto-- self .__ dict __ [key] = kwargs [key] – fijiaaron
No es realmente relevante para su pregunta, pero es posible que desee comprobar [PEP8] (http://www.python.org/dev/peps/pep-0008/) para obtener algunos consejos sobre el estilo convencional de Python. –
Hay una biblioteca fantástica para este llamado atributos. simplemente 'pip install attrs', decora tu clase con' @ attr.s', y establece los argumentos como 'a = attr.ib(); b = attr.ib() 'etc. Lea más [aquí] (https://glyph.twistedmatrix.com/2016/08/attrs.html). –