Supponiamo di avere una classe con un costruttore (o un'altra funzione) che accetta un numero variabile di argomenti e quindi li imposta come attributi di classe in modo condizionale.Come è possibile impostare gli attributi di classe dagli argomenti variabili (kwargs) in python
Potrei impostarli manualmente, ma sembra che i parametri variabili siano abbastanza comuni in python che ci dovrebbe essere un idioma comune per farlo. Ma non sono sicuro di come farlo dinamicamente.
Ho un esempio con eval, ma non è sicuro. Voglio sapere il modo corretto di farlo, magari 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])
Sembra che queste domande sono simili: 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. it/questions/1446555/python-decorator-to-ensure-that-kwargs-are-correct in modo che assomigli a ciò che voglio è forse questo --- self .__ dict __ [chiave] = kwargs [chiave] – fijiaaron
Non proprio pertinente per il tuo domanda, ma potresti voler controllare [PEP8] (http://www.python.org/dev/peps/pep-0008/) per alcuni suggerimenti sullo stile Python convenzionale. –
C'è una fantastica libreria per questo chiamato attrs. semplicemente 'pip install attrs', decora la tua classe con' @ attr.s', e imposta gli argomenti come 'a = attr.ib(); b = attr.ib() 'ecc. Leggi di più [qui] (https://glyph.twistedmatrix.com/2016/08/attrs.html). –