Python - Nombres de paquetes, clases y sus imports [Solucionado]

Tengo esta estructura:

/folder
|    /package
|    |    __init__.py
|    |    foo.py
|    bar.py

tengo 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 Foo

la 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.foo

y que me importe la clase Foo. Existe alguna forma de hacer eso?

gracias!

Hace mucho que no toco python matu pero creo recordar que cuando haces:

from package.foo import *

importas todas las clases de foo.py, y al hacer:

from package.foo import Foo

importas la clase Foo de foo.py.
¿Esto llega a funcionar?

import package

PD: He encontrado esto, a ver si te sirve smile .

m__x_ escribió:

Hace mucho que no toco python matu pero creo recordar que cuando haces:

from package.foo import *

importas todas las clases de foo.py, y al hacer:

from package.foo import Foo

importas 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 package

solo importa el paquete sin importar clases o modulos de esta forma tendria que llamar a mi clase

f = foo.Foo()

para crear una instancia

m__x_ escribió:

PD: He encontrado esto, a ver si te sirve smile .

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 package

Ya 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

confuso

mas info

tambien se puede hacer asi:

from os import sep as separador

y llamarlo como "separador" sin intermediarios..