私はJythonモジュールを同じディレクトリに置いています。私は、独自のモジュール内からだけで罰金、このクラスをインスタンス化し、実行することができますインポートしたモジュールでJythonクラスを使用できないのはなぜですか?
from java.lang import Runnable
class MyTask(Runnable):
def __init__(self, params):
Runnable.__init__(self)
self._params = params
def run(self):
# do stuff
print "Done doing stuff"
:そのうちの一つは、以下のクラスを定義します。しかし、私は別のJythonモジュールにそのモジュールをインポートし、MyTaskに()をインスタンス化しようとすると、私は次のエラーを取得:
Runnableを.__のinit __(自己) はAttributeError:クラスのRunnableは何の属性 '__init__' がありません
を私はここで何が間違っていますか?なぜこのコードは、私のクラスが定義されているモジュール内で有効ですが、そのクラスを他のモジュールにインポートすると有効ではありません。編集
を(私は、「モジュール名インポートMyTaskにから」「インポートモジュール名」ではなくて、それをインポートしています):I:問題はRunnableをインターフェイスであるため、コンストラクタを持っていないということであることを示唆している人にこれを知っているが、この状況を完全には説明していない。問題の要点は、はが定義されているモジュール内でこのクラスをインスタンス化しますが、はを別のモジュールにインポートしてインスタンス化できないということです。すなわち、mytask_moduleで
:other_moduleで
# this works
if __name__ == '__main__':
task = MyTask() # works!
thread = Thread(task)
thread.start()
:
# this throws AttributeError
if __name__ == '__main__':
import mytask_module
task = mytask_module.MyTask() # raises AttributeError
thread = Thread(task)
thread.start()
は今、あなたは混乱を見ていますか?純粋に記述しているような問題だった場合は、前の例でもAttributeErrorを発生させる必要がありますが、そうではありません。それはうまく動作します。
編集#2:明らかに、これはスタンドアロンスクリプトでは機能しますが、Eclipse/Pydev環境では機能しません。だから本当の疑問はなぜPydevが私にこれをさせないのかということです。これが自分自身のPydev/Eclipse環境の人にとってはうまくいくなら、私に教えてください。
まあ、私はそう、モジュール内からそのコードを呼び出すことができ、言ったようにそれはできません。 Jythonがそのコードを有効にするために何をしているのかはっきりしていませんが、他の場所でも使用されています。 – Jeff