2012-08-11 2 views
3

는 현재 내가 파이썬 프로그래머 아니지만, 좀 파이썬 코드에 약간의 유지 보수를주는거야, 나는 더 많거나 적은 다음 무엇을 가지고 단지 설정,파이썬에서 스레드 파생 클래스 메소드를 실행하는 방법은 무엇입니까?

class DerivedThread(threading.Thread): 
    def __init__(self): 
    threading.Thread.__init__(self) 

    def initStuff(): 
    print "Hello 2" 

    def run(self): 
    print "Hello 1" 
    self.initStuff() 
    print "Hello 3" 

initStuff 진리 print를 호출하지 않습니다 일부 변수, 조직 용으로이 방법을 추가했습니다. 이전에는 __init__run 만있었습니다.

문제는 일단 실행이 self.initStuff()에 도달하면 더 이상 메시지가 표시되지 않으며 "Hello 1" 만 파생됩니다. 파생 된 파생 메서드를 호출 할 때 문제가 있다고 생각하지만 어떤 일이 발생하는지 알지 못합니다.

무슨 일입니까?

답변

1

오, 난 그냥 에 인수로 self을 전달해야했습니다.

4

문제는 사용자의 initStuff 메소드 정의에 있습니다. 정의에 적어도 하나의 인수 (일반적으로 '자체'라고 함)가 필요합니다 (인수를 정의하지 않았습니다). 그러면 다음과 같은 상황이 발생합니다.

class MyClass(object): 

    def initStuff(self): 
     pass 

c = MyClass() 
c.initStuff() 

TypeError: initStuff() takes no arguments (1 given) 

분명히 정의한 스레드에서 코드가 자동으로 실패합니다.

문제를 해결하는 방법은 파이썬 규칙에 따라 initStuff 메서드를 정의하는 것입니다. 이 클래스 인스턴스 대신 전화 (첫 번째 인수가 명시 적으로 정의해야하는 경우 개체 자체이다) 것 같은

... 
def initStuff(self): # Here 'self' argument is defined 
     pass 

는 방법의이 종류는 을 instancemethod이라고합니다.

클래스에 대한 자세한 내용은 documentation을 참조하십시오.

관련 문제