2011-06-24 104 views
0

我有一個關於python的super()和多重繼承的語法問題。假設我有A和B類,兩者都有hello()方法。我有一個C類繼承自A和B的順序。python超級問題

如何從C顯式調用B的hello()方法?似乎很簡單,但我似乎無法找到它的語法。

回答

5

Chello方法顯式調用B的:

B.hello(self,...) 
4
>>> class A(object): 
    def hello(self): 
     print "hello from A" 

>>> class B(object): 
    def hello(self): 
     print "hello from B" 

>>> class C(A, B): 
    def hello(self): 
     print "hello from C" 

>>> c = C() 
>>> B.hello(c) 
hello from B 
>>> # alternately if you want to call it from the class method itself.. 
>>> class C(A, B): 
    def hello(self): 
     B.hello(self) # actually calling B 

>>> c = C() 
>>> c.hello() 
hello from B 
3

你可能要考慮使用超() - 而不是硬編碼B.hello() - 作爲解釋在Python's super() considered super。在這種方法中,C.hello()使用super()並自動調用A.hello(),然後使用super()並自動調用B.hello(),而不需要對類名進行硬編碼。

否則,B.hello()確實是做你想做的事的正常方法。

+2

+1用於指向Hettinger super()文章的指針。 – bgporter

-1

請記住,Python從右向左調用超類方法。

+0

它呢?不,它不。 MRO從左到右,無論在哪裏都是有意義的。 – SingleNegationElimination