¿Meexplican los paquetes?

Luis Rodrigo Gallardo Cruz lrgallardo en interservice.net
Lun Dic 22 19:12:48 CET 2003


On Mon, Dec 22, 2003 at 02:32:29AM +0100, Chema Cortés wrote:
> ¿Qué está ocurriendo?
> Es algo complejo de explicar, pero voy a intentarlo.
> ...
> No se si me he explicado, ya que también a mí me cuesta entenderlo.

Fué suficiente, gracias.

> La solución al problema pasa por no utilizar referencias a submódulos que 
> incluyan explícitamente la jerarquía de módulos del paquete, y dejar así que 
> el mecanismo de importación devuelva la referencia correcta.
> 
> En general, es muy recomendable que en lugar de
> 
>   import tst.db.Propiedad
>   a=tst.db.Propiedad
> 
> se haga siempre
> 
>   from tst.db import Propiedad
>   a=Propiedad

Me imagino que es por que así ya sabe que tst.db ya fué importado, así
que usa esa referencia en vez de intentar buscar de nuevo.

Otra duda: 

Si en vez de

  import tst.db.Propiedad

en el __init__.py hago
 
 import Propiedad

parece que todo funciona. El import busca Propiedad primero como
submódulo de tst.db y como lo encuentra ahí todo sirve. Y si despúes
hago

  a = Propiedad

a tiene la referencia correcta. Pero lo que en realidad quiero hacer
no es esto, obviamente. Lo que quiero es llamar a una función definida
en otro módulo, que a su vez guarda las referencias a Propiedad y que
despues uso desde _otro_ lado, con la intención de poder ordenar que
se refresque la definición de Propiedad. 

reload = Otro_modulo.reload_maker(Propiedad, otros_args)

La duda es: ¿Funciona? De lo que quiero estar seguro es de que vamos a
cargar el módulo correcto, aun que lo llamemos desde otro módulo. Como
esto es para una herramienta genérica, no puedo garantizar que el otro
módulo no va a tener un submódulo Propiedad, por ejemplo. El reload en
sí ya sirve, pero al tratar de meter db como subpaquete de otro fué
que falló. 

> Hay un viejo ensayo de Guido que explica algo de todo ésto:
> http://www.python.org/doc/essays/packages.html

Lo leí, pero de todas formas me ayudaste más tú.

-- 
Rodrigo Gallardo
PGP Key ID:  ADC9BC28 
Fingerprint: 7C81 E60C 442E 8FBC D975  2F49 0199 8318 ADC9 BC28
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20031222/afe931b2/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es