optionale Argumente, die in der Initialisierung der python-Klasse
Ich Frage mich, ob jemand irgendwelche guten Möglichkeiten, schnell zu erklären, wie man effizient und pythonically erstellen Benutzer-definierte Objekte mit optionalen Argumenten.
Zum Beispiel, ich möchte um das Objekt zu erzeugen:
class Object:
def __init__(self, some_other_object, i, *j, *k):
self.some_other_object = some_other_object
self.i = i
# If j is specified, assume it is = i
if(j==None):
self.j = i
else:
self.j = j
# If k is given, assume 0
if(k==None):
self.k = 0
else:
self.k = k
Gibt es einen besseren Weg, dies zu tun?
EDIT: änderte ich den code, so dass es breiter und leichter zu verstehen.
- Dieser ist nicht gültig, Sie können nicht mehrere
*
Argumente. Das argument Präfix*
wird eine Liste aller nicht-keyword-Argumente, die kommen nach diesem Punkt. - Danke @Lattyware , dass das hilft. Ich sah die *args und *keywordsargs, etc. und dachte, Sie waren auf verschiedene Argumente übergeben.
- toxotes die Antwort ist, was Sie wollen, es hat nur einen großen Fehler (siehe meinen Kommentar dazu).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie set default Parameter:
Wenn Sie nicht explizit aufgerufen, der die Klasse mit
j
undk
Ihre Instanz verwenden Sie die Standardeinstellungen, die Sie in den init-Parameter. Also, wenn Sie erstellen eine Instanz dieses Objekts können Sie alle vier Parameter als normal:OpticalTransition('sodium', 5, 100, 27)
Oder Sie weglassen können, die Parameter mit Standardwerten) mit
OpticalTransition('sodium', 5)
, der würde interpretiert werden alsOpticalTransition('sodium', 5, None, 0)
Können Sie einige Standard-Werte, aber nicht alle von Ihnen sind so gut, durch verweisen auf die Namen der parameter:
OpticalTransition('sodium', 5, k=27)
verwendetj
's Standard aber nichtk
's.Python nicht zulassen, dass Sie tun
j=i
als default-parameter (i
ist nicht ein vorhandenes Objekt, das die definition der Klasse sehen können), so dass dieself.j
Linie behandelt diese mit einerif
Aussage, dass in der Tat nicht die gleiche Sache.False
- wenn Sie möchten, um zu überprüfen, fürNone
tunif x is None:
, nichtif x:
. In diesem Beispiel, wennj
ist0
, es wird etwas unerwartetes tun. -1, bis dieses Problem behoben ist.None
.Könnte passieren, die in args als ein dict-Objekt, und analysieren der durch das dict zu bekommen, was Sie wollen. Wenn es nicht übergeben wird, erhalten Funktion gibt Keine, und Sie könnte prüfen, die Existenz so.