Domanda

Supponiamo che io abbia la seguente struttura:

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

a.py, b.py e c.py condividono alcune importazioni comuni (logging, os, re, ecc.). È possibile importare questi tre o quattro moduli comuni dal file __init__.py in modo da non doverli importare in ognuno dei file?

Modifica: il mio obiettivo è evitare di dover importare 5-6 moduli in ciascun file e non è correlato a motivi di prestazioni.

È stato utile?

Soluzione

No, devono essere inseriti nello spazio dei nomi di ciascun modulo, quindi devi importarli in qualche modo (a meno che non passi logging come argomento di funzione, il che sarebbe un modo strano di fare le cose, per non dire altro.

Ma i moduli vengono comunque importati una sola volta (e quindi inseriti negli spazi dei nomi a , b e c ), quindi non ' non preoccuparti di usare troppa memoria o qualcosa del genere.

Puoi ovviamente inserirli in un modulo separato e importare quello in ogni a , b e c , ma questo modulo separato dovrebbe comunque essere importato ogni volta.

Altri suggerimenti

Puoi farlo usando un file comune come include.py , ma va contro le pratiche consigliate perché comporta un'importazione jolly. Considera i seguenti file:

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

Ora, in a.py , ecc., fai:

from include import *

Come indicato sopra, non è consigliabile perché le importazioni di caratteri jolly sono sconsigliate.

Sì, ma non farlo . Davvero, no. Ma se vuoi ancora sapere come farlo, sembrerebbe così:

import __init__

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

Dico di non farlo non solo perché è disordinato e inutile, ma anche perché il tuo pacchetto non dovrebbe davvero usare __init__.py in quel modo. È il codice di inizializzazione del pacchetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top