Instanzvariablen definieren Unterschiede

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pythonfan3000
User
Beiträge: 5
Registriert: Montag 8. Mai 2023, 20:01

Hallo! ich wollte fragen, was der Unterschied ist zwischen dem definieren einer Instanzvariable in der __init__() Methode:

Code: Alles auswählen

class MyClass()
	def __init__(self, **kwargs):
		self.test1 = 1
		self.test2 = 2
und dem definieren einer Instanzvariable beim erstellen einer Instanz der Klasse:

Code: Alles auswählen

objekt1 = MyClass(test3 = 3, test4 = 4)
Ich würde mich sehr über Antworten freuen. Aber bitte nicht zu kompliziert erklären, da ich noch recht neu in Python bin.

LG pythonfan3000 :wink:
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Stell dir vor, du schreibst ein Programm zur Adressverwaltung. Deine Klasse Adressat könnte so aussehen:

Code: Alles auswählen

class Adressat:
	def __init__(self, vorname, nachname, strasse, plz, ort):
	    self.vorname = vorname
	    self.nachname = nachname
	    self.strasse = strasse
	    self.plz = plz
	    self.ort = ort

a = Adressat("Hans", "Mustermann", "Musterstr. 5", 12345, "Irgendwo")
b = Adressat("Anja", "Musterfrau", "Musterstr. 7", 54321, "Woanders")
Und jetzt stell dir vor, du würdest die Namen direkt in der __init__()-Methode eingeben müssen - dann bräuchtest du für jede Person eine eigene Klasse:

Code: Alles auswählen

class Adressat_A:
	def __init__(self):
	    self.vorname = "Hans"
	    self.nachname = "Mustermann"
	    self.strasse = "Musterstr. 5"
	    self.plz = 12345
	    self.ort = "Irgendwo"

class Adressat_B:
	def __init__(self):
	    self.vorname = "Anja"
	    self.nachname = "Musterfrau"
	    self.strasse = "Musterstr. 7"
	    self.plz = 54321
	    self.ort = "Woanders"

...
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pythonfan3000: Wobei die Frage an sich schon komisch bis falsch gestellt ist, denn in beiden Fällen werden die Instanzvariablen in der `__init__()` definiert. Der Unterschied ist, das im zweiten Fall die Werte dafür als Argumente übergeben werden die dann (das nehmen wir jetzt mal an) in der `__init__()` von einer anderen `MyClass` als der gezeigten an Attribute gebunden werden. Denn die gezeigte `MyClass` kann man zwar so aufrufen, aber die Schlüsselwort-Argumente werden da nirgends verwendet. Wo man sich dann fragen sollte was das `kwargs` überhaupt soll, wenn damit nichts gemacht wird. Und solche ”Magie” sollte man sich auch sparen wenn man sie nicht wirklich braucht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten