Python - Nombres de paquetes, clases y sus imports [Solucionado]
Publicado: 2 Septiembre, 2010 - 03:35 Python - Nombres de paquetes, clases y sus imports [Solucionado]
Tengo esta estructura:
/folder
| /package
| | __init__.py
| | foo.py
| bar.pytengo mi carpeta que contiene a package y al modulo bar.py. Dentro de package tengo el modulo foo.py que contiene una clase llamada Foo
estoy escribiendo en bar y tengo que hacer un import de la clase Foo
desde bar.py puedo optar por estas alternativas:
from package.foo import *
from package.foo import Foola idea es tener una clase por modulo (al estilo java) por lo tanto hacer from package.foo import Foo es como redundante y usar * es como un poco vago
me gustaria hacer algo asi:
import package.fooy que me importe la clase Foo. Existe alguna forma de hacer eso?
gracias!
- Inicie sesión o regístrese para enviar comentarios
- 906 lecturas


Hace mucho que no toco python
pero creo recordar que cuando haces:
from package.foo import *importas todas las clases de foo.py, y al hacer:
from package.foo import Fooimportas la clase Foo de foo.py.
¿Esto llega a funcionar?
import packagePD: He encontrado esto, a ver si te sirve
.
Hace mucho que no toco python
pero creo recordar que cuando haces:
from package.foo import *importas todas las clases de foo.py, y al hacer:
from package.foo import Fooimportas la clase Foo de foo.py.
¿Esto llega a funcionar?
import package.
si, es como decis, si importas * importas todas las clases o podes importar solo una especifica.
import packagesolo importa el paquete sin importar clases o modulos de esta forma tendria que llamar a mi clase
f = foo.Foo()para crear una instancia
PD: He encontrado esto, a ver si te sirve
.
si, pase por ese link, pero hay cosas que no me cierran estoy buscando algo del estilo, agregar algo en el __init__.py o parecido que al importar el paquete me importe el sub paquete o las clases...
gracias!
Pon esto en el fichero __init__.py:
__all__ = ["foo"]Creo que así haciendo:
import packageYa no necesitas hacer crear el objeto con foo.Foo().
creo que voy comprendiendo, por lo que veo no tengo forma de importar clases con un import, la unica forma de hacerlos seria
from package.foo import *donde el "from" se encarga de buscar en todos los directorios y archivos, ambos vistos como modulo, sin diferenciar "directorio" o "archivo" y el * el contenido del ultimo modulo.
__all__=["foo"]sigue importando módulos pero no el contenido de los modulos.
por lo que entiendo los módulos están pensados para ser contenedores de funciones/clases (plural) en cambio si tengo una sola función/clase en un modulo queda redundante...
vuelvo a lo mismo, no veo forma de importar una clase usando solo "import", sin necesidad de recurrir a un from bla import ble
mas info
tambien se puede hacer asi:
from os import sep as separadory llamarlo como "separador" sin intermediarios..