In einigen __init__
verschiedenen Klassen muss ich das Konstrukt mehrmals verwenden
try:
self.member_name = kwargs['member_name']
except:
self.member_name = default_value
oder wie von Moses Koledoye vorgeschlagen
self.member_name = kwargs.get('member_name', default_value)
Ich hätte gerne eine Methode, die beispielsweise den String eingibt 'member_name'
und default_value
die entsprechende Initialisierung erzeugt. Zum Beispiel, wenn man eingibt 'pi_approx'
und 3.14
der resultierende Code ist
self.pi_approx = kwargs.get('pi_approx', 3.14)
Auf diese Weise kann ich eine lange Folge dieser Initialisierungen durch eine Schleife entlang einer Liste aller erforderlichen Elemente und ihrer Standardwerte ersetzen.
Diese Technik, die eine switch-Anweisung emuliert, ist nicht dasselbe, hat aber einen ähnlichen Geschmack.
Ich bin mir nicht sicher, wie ich mich dem nähern soll, was ich tun möchte.
Angenommen, dies initializer(m_name, default_val)
ist die Konstruktion, die durch ersetzt wird
self.m_name = kwargs.get('m_name', default_val)
Ich würde verwendet es dann durch eine Listen mit member_names = [m_name1, m_name2, m_name3]
und default_values = [def_val1, def_val2, def_val3]
und ruft
for m_name, d_val in zip(member_names, default_values):
initializer(m_name, d_val)
Dies würde eine lange Liste von Versuchen ersetzen und den Code ein bisschen lesbarer machen.
Wenn Sie try/except
damit umgehen sollten KeyError
, können Sie die get
Methode des kwargs-Diktats verwenden, mit der Sie einen Standardwert angeben können:
self.member_name = kwargs.get('member_name', default)
Welche kann auf Ihre Liste der Attributnamen erweitert werden mit setattr
:
for m_name, d_val in zip(member_names, default_values):
setattr(self, m_name, kwargs.get(m_name, d_val))
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen