2011-01-07 11 views
7

Si tengo una estructura de directorios como esto:Tirando pitón módulo hacia arriba en espacio de nombres paquete

package/ 
    __init__.py 
    functions.py  #contains do() 
    classes.py  #contains class A() 

Y yo quiero ser capaz de llamar a

import package as p 

¿Cómo hacer que el contenido de functions, classes, accesible como:

p.do() 
p.A() 

en Stea d de:

p.functions.do() 
p.classes.A() 

La subdivisión de archivos es allí sólo por conveniencia (que permite la colaboración más fácil), pero preferiría tener todos los contenidos en el mismo espacio de nombres.

Respuesta

13

Usted podría hacer esto en __init__.py (porque eso es lo que importa cuando se import package):

from package.functions import * 
from package.classes import * 

Sin embargo, import * is nearly always a bad idea y esto no es una de las excepciones. En cambio, muchos paquetes de importar de forma explícita un conjunto limitado de nombres de uso común - por ejemplo,

from package.functions import do 
from package.classes import A 

Esto también permite acceder a do o A directamente, pero no es tan propenso a conflictos de nombres y los otros problemas que vienen de import * .

+0

Perfecto, gracias. No necesité 'import *', seleccionar las funciones funcionó bien. No sabía que hacer esto ('de B import B') pondría' B' en el espacio de nombres 'package' como' package.B'. Aunque es obvio ahora. – noio

Cuestiones relacionadas