Python中多继承派生类对象能否不使用super()访问指定基类方法?
可以访问!不过得用正确的语法
当然能做到啦,只是你设想的obj.c.save()这种写法行不通——因为c是obj的父类,并不是它的实例属性,所以没法直接这么调用。不过有个很直接的方法可以实现你的需求:直接通过c类来调用save方法,同时把obj作为参数传进去当self。
举个实际的代码例子:
class a: def save(self): print('a executed') class b(a): def save(self): print('b executed') class c(a): def save(self): print('c executed') class d(b, c): def save(self): print('d executed') obj = d() # 调用c类的save方法 c.save(obj) # 这行会输出 'c executed'
原理其实很简单:Python的实例方法本质上是类的函数,第一个参数self需要接收实例对象。平时我们写obj.save()的时候,Python会自动把obj作为self传进去;而当我们直接通过类调用方法时,就需要手动把实例传进去,这样c类的save方法就能正常执行啦。
如果是在d类的内部方法里想调用c的save,也可以用同样的逻辑:
class d(b, c): def save(self): print('d executed') def call_c_save(self): c.save(self) # 在内部调用c的save obj = d() obj.call_c_save() # 输出 'c executed'
内容的提问来源于stack exchange,提问作者Harrish Kumar
相关产品推荐
相关产品推荐

