No se puede crear una instancia de una clase definida en un subdirectorio

Mi diseño de proyecto (simplificado) es el siguiente:

/__init__.py /test.py /lib/__init__.py /lib/client.py 

mi test.py es simplemente:

 import lib.client A = client() A.Test() 

y mi lib\client.py comienza de la siguiente manera:

 import ui #(another class in the lib dir) class client(object): """ (Blah) """ UI = None def __init__(): UI = ui() def Test(): print "Success" 

Cuando bash ejecutar test.py, puedo ingresar al código y ver que las definiciones en el cliente se analizan; sin embargo, cuando llego a la línea en la que instancia a un cliente, obtengo la siguiente excepción:

 NameError: name 'client' is not defined 

Si cambio esa línea para que sea:

 A = lib.client() 

Entonces me pongo

 'module' object is not callable 

¿Qué me estoy perdiendo?

el objeto lib.client que tiene después de import lib.client es el módulo, no la clase. Para crear una instancia de la clase, debe llamar a la clase en el objeto de módulo:

A = lib.client.client()

o, como dijo @rantanplan, importar la clase desde el módulo

 from lib.client import client A = client() 

Acabo de entender que haces las importaciones a la manera de Java .

En python cuando haces:

 import lib.client 

No pone a disposición todas las definiciones en ese módulo. Acabas de client.py disposición el módulo real, el client.py

Entonces, o bien mantienes el esquema de importación como lo has hecho ahora y lo haces.

 import lib.client A = lib.client.client() 

o

 from lib.client import client A = client() 

También le sugiero que nombre sus clases de python con mayúsculas camelcase ie

 class Client(object): 

Como es la convención de python.