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()

または、@ rantaplanが言ったように、モジュールからクラスをインポートします

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 に答える