2

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

/__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

我错过了什么?

4

2 回答 2

4

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

A = lib.client.client()

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

from lib.client import client
A = client()
于 2012-11-15T00:31:21.347 回答
3

我刚刚了解到您以这种Java方式进行导入。

在 python 中,当你这样做时:

import lib.client

您不会提供该模块中的所有定义。您刚刚提供了实际模块 -client.py

因此,要么您像现在一样保留导入方案并执行

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

或者

from lib.client import client
A = client()

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

class Client(object):

因为它是 python 约定。

于 2012-11-15T00:34:19.883 回答