나는 두개의 자이 썬 모듈이 같은 디렉토리에있다. 그 중 하나는 다음 클래스를 정의합니다.가져온 모듈에서 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"
이 클래스를 자체 모듈 내에서 인스턴스화하고 실행할 수 있습니다. 그러나, 나는 다른 자이 썬 모듈에 해당 모듈을 수입하고 MyTask()를 인스턴스화하려고 할 때, 나는 다음과 같은 오류 얻을 :
의 Runnable .__의 init __ (자기) AttributeError : 클래스 Runnable를 더 속성 '__init__을'이없는
을여기서 내가 뭘 잘못하고 있니? 이 코드는 내 클래스가 정의 된 모듈 내에서 유효하지만 다른 클래스로 가져올 때는 유효하지 않습니다. 사람들에게 문제가 된 Runnable은 인터페이스이므로 생성자이 없다는 것을 제안했다 :
편집 (나는 여기서 "modulename 수입 MyTask에서"오히려보다 "수입 모듈 이름"으로 가져 오기있어) I 이것을 알지만,이 상황을 완전히 설명하지는 않습니다. 문제의 핵심은 내가 일 수 있습니다.은 정의 된 모듈 내에서이 클래스를 인스턴스화하지만, 은을 다른 모듈로 가져 와서 인스턴스를 생성 할 수 없습니다. 즉, 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 환경에있는 누군가에게 효과가 있다면 알려 주시기 바랍니다.
음, 내가 모듈 내에서 그 코드를 호출 할 수 있습니다 : 기본 클래스는 자바에서 인터페이스 인 경우
, 생성자는 (아무
__init__
) 존재하지 않는 당신은 얻을 그럴 수는 없습니다. 자이 썬이 코드를 유효하게 만들지는 모르겠지만 다른 곳에서도 사용되는 것을 보았다. – Jeff