2010-06-01 15 views
5

Estoy escribiendo un paquete python. Estoy usando el concepto de complementos, donde cada complemento es una especialización de una clase Worker. Cada complemento se escribe como un módulo (¿script?) Y se genera en un proceso separado.Varios módulos en un paquete que importa un módulo común

Debido a la coincidencia de bases entre los plugins (por ejemplo se extienden todas una clase base 'trabajador'), el módulo plug-in generalmente se ve así:

import commonfuncs 

def do_work(data): 
    # do customised work for the plugin 
    print 'child1 does work with %s' % data 

en C/C++, que tenemos son guardias, que evitar que un encabezado se incluya más de una vez.

¿Necesito algo así en Python, y en caso afirmativo, cómo puedo asegurarme de que Commonfuncs no se 'incluya' más de una vez?

+0

Utilice el botón "101010" para formatear el código correctamente. –

Respuesta

12

No se preocupe: solo el primerimport de un módulo en el curso de la ejecución de un programa hace que se cargue. Cada importación adicional después de esa primera simplemente recupera el objeto del módulo de un diccionario "caché" (sys.modules, indexado por cadenas de nombre de módulo) y por lo tanto es muy rápido y sin efectos secundarios. Por lo tanto, no es necesario un guardia.

+0

¡Uf! Es un alivio saberlo. +1 para la respuesta concisa (y rápida). ¿Alguna posibilidad de enviar un enlace sobre dónde puedo leer esto? – morpheous

+1

+1: "no se necesita protección" podría decirse quizás "los protectores están incorporados". –

+0

http://docs.python.org/reference/simple_stmts.html#grammar-token-import_stmt –

Cuestiones relacionadas