wann __init__ und wann normale Funktion innerhalb von Klassen anwenden?

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
david_haase33
User
Beiträge: 8
Registriert: Samstag 27. Juli 2019, 12:10

Hallo Liebes Forum,
Ich wäre sehr dankbar, wenn mir jemand erklären könnte, wann man __init__ innerhalb von klassen benutzt und wann eine normale def-Anweisung innerhalb der Klasse ausreicht, bzw. worin der Unterschied liegt.
Vielen Dank für die Hilfe
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@david_haase33: `__init__()` enthält den Code der ausgeführt wird wenn man ein Exemplar/Objekt aus einer Klasse erstellt und der dieses Objekt *initialisiert*. Das benutzt man *immer* — entweder explizit oder implizit falls die Klasse von der man erbt bereits eine `__init__()` besitzt, die das tut was nötig ist, oder falls man eine Metaklasse oder einen Klassendekorator verwendet, die/der dafür sorgt, dass es eine sinnvolle `__init__()`-Methode gibt. Beispiel für Metaklasse wäre das SQLAlchemy-ORM wo der Typ den `sqlalchemy.ext.declarative.declarative_base()` als Ergebnis liefert eine entsprechende Metaklasse besitzt. Beispiel für einen Klassendekorator wäre das `attr`-Modul.

Eine Klasse ohne eine mindestens implizite sinnvolle `__init__()`-Methode ist nicht wirklich eine Klasse.

Normale Funktionen innerhalb von Klassen, im Sinne von dass das gar keine Methode ist, nutzt man eher selten und man sollte das auch mit einem `staticmethod()`-Dekorator klar machen, dass das Absicht ist.

Die Frage an sich ist ein bisschen komisch und sollte vielleicht eher lauten wann/wofür man Klassen verwendet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
david_haase33
User
Beiträge: 8
Registriert: Samstag 27. Juli 2019, 12:10

Vielen Dank für die Antwort.
Ich bin immoment noch ein bisschen verwirrt von dem ganzen Syntax, den python liefert...
Mit ein bisschen Zeit wird sich das aber sicher mehr und mehr aufklären.
Antworten