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:
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

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.