Seite 1 von 1

Instanzvariablen definieren Unterschiede

Verfasst: Freitag 12. Mai 2023, 18:56
von Pythonfan3000
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:

Re: Instanzvariablen definieren Unterschiede

Verfasst: Freitag 12. Mai 2023, 20:19
von pillmuncher
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"

...

Re: Instanzvariablen definieren Unterschiede

Verfasst: Freitag 12. Mai 2023, 20:30
von __blackjack__
@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.