Dynamisches laden von Klassen

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
JamesS
User
Beiträge: 5
Registriert: Sonntag 1. August 2021, 11:55

Hallo,
Ich bin Anfänger was Python angeht und hab entsprechend auch eine Anfänger Frage. :D
In der suche könnte ich leider keine Antwort finden.

In php gibt es die Funktion spl_autoload, mit der man die benötigten Klassen nachladen kann.
Dadurch spart man sich die manchmal recht viel zeiligen include oder require Anweisungen und das ganze wird meiner Meinung übersichtlicher.

Gibt es sowas oder sowas ähnliches auch in Python?
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also unter Python wird das `import` Statement immer dann ausgeführt, wenn es im Quellcode steht. In der Regel bzw. per Konvention am Anfang des Codes.

Wenn du jetzt einen Codezweig hättest, der ggf. nie betreten wird, weil dafür die Bedingung nicht erfüllt sind, der Codezweig aber ein anderes Modul braucht, dann kannst du das `import Statement` auch da rein packen. Das kommt aber eher selten vor, dass das wirklich sinnvoll ist. Zumal der Code dadurch i.d.R. unübersichtlicher wird.

Codezeilen sparst du bei Python dadurch auch nicht, weil das `import` Statement halt immer eine Zeile ist.

Und wenn du ein Modul nicht brauchst importierst du es halt nicht.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JamesS: Gibt es nicht. „Explicit is better than implicit”. Das macht es im Gegenteil auch nicht übersichtlicher, sondern man weiss dann nicht wo eigentlich welcher Name definiert wurde, weil alles automagisch irgendwie auftaucht. Und bitte gar nicht erst auf die Idee kommen ``*`` beim Importieren zu verwenden.

In dem Zusammenhang vielleicht auch erwähnenswert: Module sind dazu da um zusammengehörige Funktionen und Klassen — Mehrzahl! — zu gruppieren. Also nicht jede Klasse in ein eigenes Modul separieren. Hier ist Python und nicht Java. 🙂
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
JamesS
User
Beiträge: 5
Registriert: Sonntag 1. August 2021, 11:55

Danke für die Antworten.
Wenn ich nun ein umfangreiches Programm habe, da hab ich also am Anfang dutzende imports hmm.
Ich bin von php das autoload gewöhnt, da hab ich jede Klasse in einer Datei die genauso heißt wie die Klasse darin.
OK muss ich mich mal damit befassen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JamesS: Naja so viele Importe sind das dann letztlich ja auch nicht, denn Du importierst ja nur was Du in dem Modul brauchst. Das kann ja nicht zu viel werden ohne das es unübersichtlich wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
JamesS
User
Beiträge: 5
Registriert: Sonntag 1. August 2021, 11:55

Von Modulen und der ganzen Datei struckur hab ich noch keine Ahnung, ich hab nen crash Kurs angefangen da geht es um Hallo Welt :lol: tupels listen usw.. Ich kann also nur von dem ausgehen das ich kenne und das ist zur Zeit php und bisschen c/c++ und bei beiden ist es so das ich ein Programm habe z. B. Index.php in das ich alles einbinden was ich brauch, und da hab ich schon scripte gesehen die 20+ includes und requires hatten. Muss alse erstmal meinen Kurs weiter machen. :D
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JamesS: Das ist in Python anders. ``import`` ist kein ``include`` das Quelltext in anderen Quelltext einfügt. Module sind in Python Objekte die einen Namensraum bilden. Jedes Modul importiert das was es selbst braucht. Es gibt kein zentrales Modul in das man einfach alles importiert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten