Python 在grand child类中调用祖父母方法

Python 在grand child类中调用祖父母方法,python,super,Python,Super,对不起,这可能是个愚蠢的问题,但我很困惑。假设我们有以下类: 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) 我正在访问child中的父方法,它打印出B,但我想从类A访问方法,因为我们正在从类B访问方

对不起,这可能是个愚蠢的问题,但我很困惑。假设我们有以下类:

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)
我正在访问child中的父方法,它打印出
B
,但我想从类
A
访问方法,因为我们正在从类
B
访问方法


我知道我们可以在B类中添加
super
,但我不想修改B类
。那么,在类
C
中是否有直接从
A
获取方法的选项?

您可以这样调用
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

注意:我删除了
args
kwargs
,因为
A
B
类没有使用这些参数。如果你想让
say
通过简单地调用
A.say(self,*args,**kwargs)
而如果
A.say
返回一些东西,你也可以返回它

你可以通过A.say()直接调用类A的say方法-从类C的say()方法中@PeterMajko你需要一个A的实例来实现这一点。桑杰-你为什么要做这样的事?一方面你在使用继承,另一方面你试图打破它。最好把你想完成的事情写出来,而不是你想怎么做。可能有更好的方法来实现你的目标在C类中,你的say()方法可以通过
super(B,self),say()来访问A。我明白了,我忘了把“self”作为参数:)A.say(self)我想这也可以工作得很好,就像更一般的方法一样:super(super(self.\u class\uu,self),self)