无法实例在子目录中定义的类(Unable to instantiate a class define

2019-07-03 20:18发布

我(简体)项目布局如下:

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

我在想什么?

Answer 1:

lib.client你有对象后import lib.client是模块,而不是类。 为了实例需要调用的模块对象的类的类:

A = lib.client.client()

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

from lib.client import client
A = client()


Answer 2:

我只是明白,你做的进口Java方式。

在蟒蛇当你这样做:

import lib.client

你不把所有可用该模块中的定义。 你只要提供实际的模块- client.py

因此,无论你保持进口计划,作为你现在做

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

要么

from lib.client import client
A = client()

此外,我建议你命名你的Python类用大写首字母大写,即

class Client(object):

由于它是Python约定。



文章来源: Unable to instantiate a class defined in a subdirectory