有关继承,大家都知道子类继承父类方法,没有错。
当子类想调用父类方法时,用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,故调用父类方法时需要传入适当的参数!