2010-03-24 57 views
0

我想從抽象父類調用重新定義的私有方法。如果有問題,我正在使用django。從父類調用私有父類方法(django)

class Parent(models.Model): 
    def method1(self): 
     #do somthing 
     self.__method2() 

    def method2(self): 
     pass # I also tried calling up a prent method with super 

class child(Parent): 
    def method1(self) 
     super(Child, self).method1() 

    def __method2(self): 
     #do something 

我得到一個

AttributeError: "'Chil' object has no attribute '_Parent__method2'" 

我做錯了嗎?

+0

我應該補充說,如果method2不是私有的(方法2而不是__method2),它可以很好地工作。 這很容易在C++中完成,但我不知道如何用python執行它 – philgo20 2010-03-24 21:00:00

+0

這是因爲C++實際上*具有*私有屬性,並且不會執行名稱修改。 – 2010-03-24 21:04:50

回答

3

由於方法定義方法調用get mangled,初始雙下劃線防止多態性,以防止兩個不同的名稱。用一個下劃線替換來解決這個問題。

此外,雙下劃線是而不是用於「私人」屬性,你應該放棄任何引用告訴你,他們是。他們被用於MI消歧。

+0

謝謝。我將不得不重新閱讀簡單和雙重undrscores的使用。順便說一句,感謝所有的答案,你是一個偉大的幫助Ignacio。非常感謝;-) – philgo20 2010-03-24 21:17:02

+0

你指示放棄的「參考」來自python幫助文檔,只是你知道的。 – Qix 2017-04-20 17:38:30