2010-08-17 67 views
3

這是我的第一篇文章,所以首先我想說一個巨大的「謝謝!」到社區的stackoverflow所有的時間答案做了我的技巧:)繼承和「自我」引用的問題

我在處理python的繼承問題。

我有包含以下代碼一個父類:

def start(self): 

    pid = os.fork() 

    if (pid==0): 
    self.__do_in_forked_process() 
    elif(pid > 0): 
    self.__do_in_parent_process() 
    else: 
    print ("Error while forking...") 
    sys.exit(1) 

的__do_in_forked_process()方法包含一種方法self.__manage_request()其在父類中定義並在子類中重寫。

在子類中,當我使用使用self.start()問題出現的方法,包括:執行自.__ manage_request()方法是在父類而不是方法中定義的一個定義在子類中(即使,我假設,當我做self.start()start方法時,它裏面的所有東西都應該引用子對象而不是父對象)。

提前致謝!

turkishweb

回答

6

不要用你的方法前導下劃線等屬性名稱:他們是專門旨在隔離子類的父類,這是最絕的,你做什麼想在這裏!在整個過程中,將所討論的方法重命名爲_manage_request(單引號下劃線),從此過上幸福的生活。並且在將來使用雙前導下劃線時,只有當你完全確定時,你永遠不需要該屬性的任何重寫(或從子類方法中的訪問)(方法只是屬性的特例)。

在C++術語中,單引號下劃線表示protected:允許使用子類並歡迎訪問和覆蓋。雙引號下劃線意味着private:即使對於子類(並且某些編譯器名稱會混淆以幫助它),也意味着放手。我似乎很少有雙重主要的下劃線用於清晰的目的和對此的理解。

+0

你是最棒的!非常感謝,現在它就像一個魅力! :) – turkishweb 2010-08-17 15:34:41

+0

你很幸運。你的第一個問題由世界上最着名的Python專家之一回答。 – Odomontois 2010-08-17 20:22:29