Załóżmy, że mamy klasę z konstruktorem (lub inną funkcją), która pobiera zmienną liczbę argumentów, a następnie warunkowo ustawia je jako atrybuty klas.Jak ustawić atrybuty klas z argumentów zmiennych (kwargs) w pythonie
Mogę ustawić je ręcznie, ale wydaje się, że parametry zmienne są dość powszechne w Pythonie, że powinien to być wspólny idiom do tego. Ale nie jestem pewien, jak to zrobić dynamicznie.
Mam przykład przy użyciu eval, ale to prawie nie bezpieczne. Chcę wiedzieć, jak to zrobić - może z 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])
Wygląda na te pytania są podobne: 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-is-correct, więc wygląda na to, co chcę, to może to - ja .__ dict __ [key] = kwargs [key] – fijiaaron
Nie bardzo pasuje do twojego pytanie, ale możesz chcieć sprawdzić [PEP8] (http://www.python.org/dev/peps/pep-0008/) kilka wskazówek na temat konwencjonalnej stylizacji Pythona. –
Istnieje fantastyczna biblioteka do tego zwana attrs. po prostu 'pip install attrs', udekoruj swoją klasę' @ attr.s' i ustaw args jako 'a = attr.ib(); b = attr.ib() 'itp. Przeczytaj więcej [tutaj] (https://glyph.twistedmatrix.com/2016/08/attrs.html). –