无法实例化子目录中定义的类

时间:2012-11-15 00:19:30

标签: python oop class syntax

我的(简化)项目布局如下:

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

我的test.py只是:

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

我的lib\client.py开头如下:

import ui #(another class in the lib dir)

class client(object):
    """
    (Blah)
    """
    UI = None

    def __init__():
        UI = ui()

    def Test():
        print "Success"

当我尝试运行test.py时,我可以进入代码并看到客户端中的定义被解析,但是,当我到达实例化客户端的行时,我得到以下异常:

NameError: name 'client' is not defined

如果我将该行更改为:

A = lib.client()

然后我得到

'module' object is not callable

我错过了什么?

2 个答案:

答案 0 :(得分:3)

lib.client之后的import lib.client对象是模块,而不是类。要实例化类,需要在模块对象中调用该类:

A = lib.client.client()

或者,正如@rantanplan所说,从模块中导入类

from lib.client import client
A = client()

答案 1 :(得分:3)

我只知道你以Java的方式进行导入。

在python中执行:

import lib.client

您没有提供该模块中的所有定义。你刚才 使实际模块可用 - client.py

所以要么像现在一样保留导入方案,要么

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

from lib.client import client
A = client()

另外,我建议你用大写的camelcase命名你的python类 即

class Client(object):

因为它是python惯例。