2009-02-26 4 views
1

나는 두개의 자이 썬 모듈이 같은 디렉토리에있다. 그 중 하나는 다음 클래스를 정의합니다.가져온 모듈에서 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 환경에있는 누군가에게 효과가 있다면 알려 주시기 바랍니다.

답변

0

Runnable은 인터페이스이므로 생성자가 없습니다. 나는 __init__에 대한 호출을 생성자를 호출하는 것으로 추측하고있다. __init__

+0

음, 내가 모듈 내에서 그 코드를 호출 할 수 있습니다 : 기본 클래스는 자바에서 인터페이스 인 경우

, 생성자는 (아무 __init__) 존재하지 않는 당신은 얻을 그럴 수는 없습니다. 자이 썬이 코드를 유효하게 만들지는 모르겠지만 다른 곳에서도 사용되는 것을 보았다. – Jeff

1

자이 썬에는 'inferface은'아직 없다 자이 썬 (파이썬)의 생성자 클래스

입니다. '구현'은 상속으로 에뮬레이트됩니다. 그래서, 내가 말했듯이

 
AttributeError: class Runnable has no attribute '__init__'