У меня есть пара модулей 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 __
Что я здесь не так делаю? Почему этот код действителен в модуле, где определен мой класс, а не при импорте этого класса в другой модуль? (Я импортирую его с помощью «import modulename», а не «from modulename import MyTask»)
Редактировать : Тем, кто предположил, что проблема в том, что Runnable является интерфейсом и, следовательно, не имеет конструктора: я знаю это, но он не полностью объясняет эту ситуацию. Суть вопроса в том, что я могу создать экземпляр этого класса в модуле, в котором он определен, но я не могу импортировать его в другой модуль и создать его там. то есть.,
В модуле mytask_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 / Eclipse, пожалуйста, дайте мне знать.