2012-08-11 78 views
3

目前,我不是一個Python程序員,但我給一些維修一些Python代碼,我有什麼或多或少如下:如何從Python中運行線程派生的類方法?

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",我認爲這是使用python調用派生方法的一些問題,但我不知道發生了什麼。

發生了什麼事?

回答

1

哦,我知道了,我只需要通過self作爲參數initStuff

4

問題在於您的initStuff方法的定義。它的定義中至少需要一個參數(通常稱爲'self')(您沒有定義參數)。讓我們看看接下來會發生什麼:

class MyClass(object): 

    def initStuff(self): 
     pass 

c = MyClass() 
c.initStuff() 

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

所以很明顯,您的代碼會在您定義的線程中靜靜地失敗。

解決該問題的方法是按照Python規則定義initStuff方法。

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

這種方法被稱爲instancemethod,因爲它被稱爲代表你的類的實例(與第一個參數是必須被明確定義實例對象本身)。

查看更多關於documentation的課程。

相關問題