2017-11-11 79 views
0

對不起,可能是這個愚蠢的問題,但它對我很困惑。讓我們假設我們有以下類別:在盛大兒童班致電祖父母方法

class A(): 
def say(self): 
    print("A") 

class B(A): 
def say(self): 
    print("B") 

class C(B): 
def say(self,*args, **kwargs): 
    return super(C, self).say(*args, **kwargs) 

我訪問父類的方法中的孩子,它打印B,但我想,我們都可以從B類訪問從A類訪問方法。

我知道我們可以在B班中加入super,但我不想修改B班。那麼是否有任何選項可以直接從A中獲得方法C

+0

可以直接調用方法,通過A.say(說A級) - 發言權內( )類C的方法。 –

+4

@PeterMajko你需要一個A的實例來做到這一點。桑傑 - 你爲什麼想要做這樣的事情?一方面你使用繼承,另一方面你試圖打破它。更好的帖子*你想完成什麼,而不是*你想要做什麼。可能有更好的方法來實現你的目標 – alfasin

+2

在C類中,你的say()方法可以通過'super(B,self)來訪問A,say()' –

回答

0

可以通過調用A.say(self)這樣的:

class A(): 
    def say(self): 
     print("A") 

class B(A): 
    def say(self): 
     print("B") 

class C(B): 
    def say(self): 
     A.say(self) 
     B.say(self) 
     print("C") 

然後從終端對其進行測試:

>>> a = A() 
>>> a.say() 
A 
>>> b = B() 
>>> b.say() 
B 
>>> c = C() 
>>> c.say() 
A 
B 
C 

注:我放棄了argskwargs因爲AB類沒不會使用這些論據。如果你想使say採取那些一路上漲,雖然只需撥打A.say(self, *args, **kwargs)如果A.say回報的東西,你可以返回它太

+0

這可以工作,我認爲,作爲更一般的方法:超級(超級(self.__ class__,self),self).say(* args,** kwargs) –