Module Funktion, die schon beim import aufgerufen wird

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
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

Hallo!
Möchte ein Module a'la matplotlib.pyplot erstellen.
Beim Debuggen sehe ich, dass Code schon beim Import ausgeführt wird.

Könnt ihr mir verraten, wie man eine Funktion ermächtigt, dass sie schon
beim Import ausgeführt wird?

Danke für eure Antworten
Erhy
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst ja immer einfach Code auf modulebene schreiben. Und Dir den Source von matplotlib anschauen.

Nur machen sollte man das eher nicht. Code der implizit ausgeführt wird macht oft Ärger. Warum glaubst du das machen zu müssen?
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

Um eine globale Variable zu definieren, die nur modulweit gültig ist.
In matplotlib.pyplot wird meinem abschließenden pyplot.show() alle Plots gezeigt, die vorher definiert worden sind.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Erhy: Wie __deets__ schon schrieb sollte man so etwas nicht machen. `pyplot` macht das ja im Grunde auch nur so unsauber mit globalem Zustand weil Benutzer von Matlab & Co das so gewohnt sind in der interaktiven Umgebung.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

mein Modul soll ähnlich wie pyplot sein, da die Anwender es so gewohnt sind.

Irgendwann werde ich es schon herausbekommen, wo man die initiale Funktion einträgt
oder wie sie zu definieren ist.

Erhy
nezzcarth
User
Beiträge: 1762
Registriert: Samstag 16. April 2011, 12:47

Erhy hat geschrieben: Sonntag 29. September 2019, 16:04 mein Modul soll ähnlich wie pyplot sein, da die Anwender es so gewohnt sind.

Irgendwann werde ich es schon herausbekommen, wo man die initiale Funktion einträgt
oder wie sie zu definieren ist.

Erhy
__deets__ hat es doch schon erklärt. Das passiert automatisch. Man muss in Python extra Schritte unternehmen, damit Code auf globaler Ebene nicht ausgeführt wird (das bekannte "if __name__ == '__main__': ..." -Konstrukt). So etwas wie 'BEGIN { ... }' in AWK oder Perl gibt es in Python nicht.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Und weil man es einmal eingeführt hat, haben die Matplolib-Macher jetzt Probleme, das wieder los zu werden. Also fang erst gar nicht damit an, wirklich nicht. Auch Deine Anwender werden Dir bald dafür dankbar sein.
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

und wie soll ich es anlegen?
Die Plot-Aufrufe sollen in einer Anwendung, die vielleicht schon besteht,
nach belieben einfügbar sein, ähnlich einer Log-Funktion.

Könnte natürlich auch vorschlagen, dass initial einer globalen Variablen die Instanz einer zentralen Klasse zugeordnet wird
und jeder Aufruf einer Methode dieser Klasse entspricht.

Danke für eure Design-Tipps
Erhy
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Erhy: Das was Du da beschreibst ist doch ziemlich genau das was `pyplot` macht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

ja, habe mir auch das plotting Modul angeschaut.
Scheint auch ein gutes Beispiel zu sein.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ja, ein gutes Beispiel wie man das eigentlich nicht macht. 😉
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten