我有几个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()时,我会遇到以下错误:
可运行__初始(自我)
AttributeError:class Runnable没有属性“_init__”
我做错了什么?为什么这段代码在定义我的类的模块内有效,但在我将该类导入另一个模块时无效?(我是用“import modulename”而不是“from modulename import MyTask”导入它的)
编辑
:对于那些认为问题在于Runnable是一个接口,因此没有构造函数的人:我知道这一点,但它并不能完全解释这种情况。问题的关键是我
可以
在定义该类的模块中实例化该类,但是
不能
将其导入另一个模块并在那里实例化。即。,
在mytask_模块中:
# 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环境中都有效,请告诉我。