私は最近、Pythonで記述され、web.pyを使用するWebサイトの保守を引き継ぎました。インポートしたいクラスを作成しましたが、「TypeError:'module'オブジェクトが呼び出せません」というエラーが発生します。すべての.pyモジュールは、「lib」というディレクトリ呼び出しに保存されます。libディレクトリには、次のモジュールがあります-noun.py、verb.py、context.py、word.py、base.py。libディレクトリ内には--init--.pyファイルがあります。noun.pyモジュールをコンテキストモジュールにインポートしようとしています。以下は、他のモジュールをインポートするために使用されるcontext.pyモジュールのコードです。
from lib import verb, word, base
これは、動詞、単語、および基本モジュールをインポートするために正常に機能するようです。しかし、そのステートメントの最後に名詞を追加して、それを作成すると...
from lib import, verb, word, base, noun
「TypeError:'module'オブジェクトは呼び出し可能ではありません」というエラーが発生します。私も試しました...
import noun #Also produces the same error
だから私は次のことを試しました...
from noun import *
この方法でモジュールをインポートするとエラーは解消されますが、名詞モジュールの属性を参照すると、「AttributeError:名詞インスタンスに属性'get_stem_used'がありません」というエラーが発生します。以下は名詞モジュールからのコードです...
from base import base
class noun:
wordBase = None
stemBase = None
def __init__(self, pId):
b = base()
wrdBase = b.get_word_base(pId)
self.wordBase = wrdBase['base']
stmBase = b.get_stemBase(pId)
self.stemBase = stmBase['stem']
#Code to make sure the module is instantiated correctly and the data is validated
def get_output(self):
return self.wordBase
def get_stem_used(self):
return self.stemBase
verb.pyモジュールには、基本的にnoun.pyモジュールと同じコードがあります。context.pyモジュールには、次のコードがあります...
n = noun(id)
base = n.get_output()
#I print out base to make sure everything is good and it is
v = verb(id)
verb = v.get_output()
次に、「n」と「v」がword.pyモジュールに渡されます。word.pyモジュール内には、次のコードがあります。
if v.get_stem_used == "Some Value":
#do whatever
elif n.get_stem_used == "Another value": #This line produces the "attribute error"
#do something
n.get_stem_usedにアクセスしようとすると、「AttributeError:名詞インスタンスに属性'get_stem_used'がありません」というエラーが発生します。私はいくつかの調査を行い、このURL http://effbot.org/zone/import-confusion.htmに遭遇しました。これにより、名詞モジュールを適切にインポートしておらず、インポートしていないため、次のコードを使用する名詞モジュール...ドット表記を使用して名詞クラスの要素を参照することはできません。
from lib import, verb, word, noun
上記のステートメントの最後に「名詞」を追加しても機能しないのは奇妙ですが、他のすべてのモジュールを正しくインポートしているようです。タブとスペースを混在させるとこのエラーが発生する可能性があることを確認しましたが、エディターを使用して、適切にタブが設定されていることを確認しました。私はこれにしばらく取り組んできたので、どんな助けでも大歓迎です。ありがとう。
以下は--init--.pyの内容です
#!/usr/local/bin/python2.5
# -*- coding: utf-8 -*-