关于super继承链的问题

有关继承,大家都知道子类继承父类方法,没有错。
当子类想调用父类方法时,用super语句,并且注意,super语句不仅能调用上一级父类的方法,还能调用任意一级父类方法,只要传对了合适的的参数即可,请看代码:

class Person(object):
	def show(self):
		print("我是人类")

class Plane(object):
	def show(self):
		print("我是飞机")
	def fly(self):
		print("飞机可以飞")

class Student(Person,Plane):
	def show(self):
		#调用父类的方法,注意调用的是Person上一级,也就是Plane的show方法!
		super(Person,self).show()
		print(self.__class__.mro())

s1 = Student()
s1.show()

其中Student类中调用了super语句,默认super()如果不传参数的话,调用的是其上一级父类,也就是Person的show方法,但是传入参数
super(Person,self)则调用的是Person的show方法,并且传入self参数!
执行结果如下:

在这里插入图片描述
可以看到执行的是plane的show方法,“我是飞机”, 并且可以看到类的继承链,有了这个方法,则可以轻松调用继承链上任意一级的父类方法!

并且注意,调用某一级的父类方法时,传入参数必须符合该级父类方法的要求。比如:

class AA(object):
	#复写父类的方法
	def __init__(self,name):
		print("A")
		self.name = name
#父类不可以使用子类里面的方法和属性
class B(AA):
	#提示一下:如果子类复写了父类的方法,那么不会执行父类的方法
	def __init__(self):
		#调用父类的init方法(调用本身类的方法)
		# self.__init__("张三")
		#使用类名(注意点必须传入对象)
		# AA.__init__(self,"张三")
		# print("BB")
		#类继承链的方法
		#super()._ 相当于super(B,self)
		#如果不传参数,代用当前类的下一个类,当前链条
		self.subject = "数学"
		super().__init__("王五") 
		print(self.__class__.mro())


b = B()
print(b.name)

super().init(“王五”) 注意父类的方法需要传两个参数:self和name,
而子类方法只需一个self,故调用父类方法时需要传入适当的参数!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值