ein paket bilden, wie richtig

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
blutigeranfaenger
User
Beiträge: 65
Registriert: Dienstag 4. März 2014, 12:04

Hallo zusammen,
mir ist nicht so ganz klar, wie das mit dem Bilden eines eigenen Paketes funktioniert.
Ich habe einen Ordner erstellt, der heißt "pakettest".
Dort gibt es eine Datei __init__.py und eine weitere, die heißt defs.py, da sind verschiedene Funktionen definiert:

Code: Alles auswählen

#!/usr/bin/env python3
def multipliziers(a, b):
    return a*b

def geteilt(a, b):
    return round(a/b,2)

def hoch(a, b):
    return a**b
In der __init_datei__ steht:

Code: Alles auswählen

from .defs import multipliziers,geteilt,hoch
Ich kann das Paket nun laden und kann auch auf die funktionen zugreifen:

Code: Alles auswählen

import pakettest
 pakettest.defs.multipliziers(3,4)
Ich hätte nur gerne, dass alles was in defs.py steht automatisch geladen wird und ich hätte gerne, dass ich eingeben kann:

Code: Alles auswählen

import pakettest
pakettest.multipliziers(3,4)
Mir ist leider nicht klar, was nun in __init__.py stehen muss, damit das klappt.
Vielen Dank für Eure Hilfe!
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Das, was jetzt in __init__.py steht, reicht.
blutigeranfaenger
User
Beiträge: 65
Registriert: Dienstag 4. März 2014, 12:04

Stimmt, hätte ich nicht gedacht!
Gibt es auch die Möglichkeit, automatisch alle Funktionen auf einmal zu laden oder müssen die alle einzeln aufgezählt werden?
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die sollten alle einzeln aufgezählt werden, denn spätestens wenn mal jemand wissen möchte was da alles definiert wird und in das Modul rein schaut, ist der froh wenn das da auch tatsächlich steht und nicht noch mal in einem anderen Modul.

Wobei man den Paketinhalt auch in die `__init__.py` schreiben kann statt in eine weitere Datei. Andererseits reicht dann auch ein Modul. Paket macht erst bei mehreren Modulen Sinn. Und dann sollte auch nicht alles was in den Modulen steht auch über das Paket verfügbar sein, weil sich dann doch schon die Frage stellt warum das überhaupt alles aufgeteilt ist, wenn es dann doch wieder zusammengekippt wird.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten