Frage

Angenommen, ich habe die folgende Struktur:

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py, b.py und c.py einige gemeinsame Importe (Logging, os, re, etc.) teilen. Ist es möglich, diese drei oder vier gemeinsame Module aus der __init__.py-Datei zu importieren, damit ich sie nicht in jedem der Dateien importieren muß?

Edit:. Mein Ziel ist es 5-6 Module in jeder Datei zu importieren, um zu vermeiden, und es ist nicht zu Performance-Gründen im Zusammenhang

War es hilfreich?

Lösung

Nein, müssen sie in jedem Modul Namensraum gesetzt werden, so muss man sie irgendwie importieren (es sei denn, Sie logging um als Funktion Argument übergeben, die eine seltsame Art und Weise, Dinge zu tun wäre, gelinde gesagt).

Aber die Module werden nur einmal sowieso importiert (und dann in den a, b und c Namespace), also keine Sorge über zu viel Speicher verwendet oder so ähnlich.

Sie natürlich können sie in einem separaten Modul setzen und Import , die in jede a, b und c, aber dieses separates Modul würde noch sein müssen importiert jedes Mal.

Andere Tipps

Sie können dies tun, eine gemeinsame Datei wie include.py verwenden, aber es geht gegen den empfohlenen Praktiken, weil sie eine Wildcard Import beinhaltet. Betrachten Sie die folgenden Dateien:

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

Nun, in a.py usw. tun:

from include import *

Wie bereits erwähnt, ist es nicht zu empfehlen, da Wildcard-Importe abgeraten.

Ja, aber tut es nicht . Im Ernst, dies nicht tun. Aber wenn Sie noch wissen wollen, wie es zu tun, es so aussehen würde:

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

, ich sage nicht, dass es nicht nur zu tun, weil es ist chaotisch und sinnlos, sondern auch, weil Ihr Paket soll nicht wirklich __init__.py so verwenden. Es ist Paket Initialisierungscode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top