2017-11-11 83 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) –