我有几个 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__(self) AttributeError: 类 Runnable 没有属性 '__init__'
我在这里做错了什么?为什么此代码在定义我的类的模块中有效,但在我将该类导入另一个模块时无效?(我用“import modulename”而不是“from modulename import MyTask”来导入它)
编辑:对于那些认为问题在于 Runnable 是一个接口,因此没有构造函数的人:我知道这一点,但它并没有完全解释这种情况。问题的关键是我可以在定义它的模块中实例化这个类,但我不能将它导入另一个模块并在那里实例化它。IE,
在 mytask_module 中:
# this works
if __name__ == '__main__':
task = MyTask() # works!
thread = Thread(task)
thread.start()
在 other_module 中:
# 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 环境中的任何人都有效,请告诉我。