0

dbObject と呼ばれる記述しようとしているクラスがあり、別のフォルダー内のスクリプトからインポートしようとしています。私の構造は次のとおりです。

/var/www/html/py/testobj.py

/var/www/html/py/obj/dbObject.py

/var/www/html/py/obj/__init__.py

今、__init__.py空のファイルです。dbObject.py の内容は次のとおりです。

class dbObject:
        def __init__():
                print "Constructor?"

        def test():
                print "Testing"

testobj.py の内容は次のとおりです。

#!/usr/bin/python
import sys
sys.path.append("/var/www/html/py")
import obj.dbObject

db = dbObject()

これを実行すると、次のようになります。

Traceback (most recent call last):
  File "testobj.py", line 7, in <module>
    db = dbObject()
NameError: name 'dbObject' is not defined

私はPythonを初めて使用するので、何が間違っているのか非常に混乱しています。誰かが私を正しい方向に向けてもらえますか?

編集: Martijn Pieters の回答のおかげで、testobj.py を次のように変更しました。

#!/usr/bin/python
import sys
sys.path.append("/var/www/html/py")
sys.path.append("/var/www/html/py/dev")
from  obj.dbObject import dbObject

db = dbObject()

ただし、実行すると次のエラーが発生します。

Traceback (most recent call last):
  File "testobj.py", line 7, in <module>
    db = dbObject()
TypeError: __init__() takes no arguments (1 given)

これは私のinit .py または dbObject 内のコンストラクターを参照していますか?

EDIT(2): 自分自身を解決しました。コンストラクターは、少なくとも 1 つのパラメーター (それ自体への参照) を受け取ることができる必要があります。簡単な修正。この問題は解決したようです!

編集(最終):これは素晴らしいです- import sys および sys.path.append 行を切り取ることができ、このインスタンスでも引き続き機能します。素晴らしい。

4

1 に答える 1

1

モジュールからクラスをインポートする必要があります。

from obj.dbObject import dbObject

dbObjectこれにより、クラスがローカル名前空間に直接追加されます。

ステートメントimport obj.dbObjectは名前をローカル名前空間に追加するobjため、代わりにこれを行うこともできます。

db = obj.dbObject.dbObject()

パッケージディレクトリ内のモジュールであるためobj.dbObjectです。dbObject.pyobj

于 2012-10-03T16:55:08.250 に答える