版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 https://blog.csdn.net/qq_26442553/article/details/81775449
Python虽然支持多继承,但是python支持的多继承也是有限的。
1.多继承的使用
#1.多继承:子类有多个父类
class Human:
def __init__(self,sex):
self.sex = sex
def p(self):
print("这是Human的方法")
class Person:
def __init__(self,name):
self.name = name
def p(self):
print("这是Person的方法")
def person(self):
print("这是我person特有的方法")
class Teacher(Person):
def __init__(self,name,age):
super().__init__(name)
self.age = age
class Student(Human,Person):
def __init__(self,name,sex,grade):
super().__init__(sex)
super().__init__(name)
self.grade = grade
class Son(Human,Teacher):
def __init__(self,sex,name,age,fan):
Human.__init__(self,sex)
Teacher.__init__(self,name,age)
self.fan = fan
#------创建对象 -------------
stu = Student("tom","male",88)
stu.p() #虽然父类Human和Person都有同名P()方法 ,但是调用的是括号里的第一个父类Human的方法
son1 = Son("jerry","female",18,"打球")
son1.person() #可以调用父类的父类的方法。
son1.p() #子类调用众多父类中同名的方法,按继承的顺序查找。
=====================================================================================
这是Human的方法
这是我person特有的方法
这是Human的方法
总结:1.需要注意圆括号中继承父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
2.支持多层父类继承,子类会继承父类所有的属性和方法,包括父类的父类的所有属性 和 方法。
2.多继承的使用注意事项
#1.多继承子类对父类构造方法的调用
class Human:
def __init__(self,sex):
self.sex = sex
def p(self):
print("这是Human的方法")
def str1(self):
print("this si"+str(self.sex))
class Person:
def __init__(self,name):
self.name = name
def p(self):
print("这是Person的方法")
def person(self):
print("这是我person特有的方法")
def str2(self):
print( "this is:" + str(self.name))
class Student(Human,Person): #注意子类如果没有构造方法时,按括号内父类的继承顺序去继承父类构造方法,只继承一个
def prin(self):
print("student")
#------创建对象 -------------
#stu1=Studnent("男","tom")报错。
stu = Student("sex") #这里继承的是Huma的构造方法。
stu.p()
stu.str1()
#stu.str2()报错,因为即使human和person都是一个参数的构造方法,但是这里继承调用的是第一个Human的构造方法
====================================================================================
这是Human的方法
this sisex
总结:子类从多个父类派生,而子类又没有自己的构造函数时,
(1)按顺序继承,哪个父类在最前面且它又有自己的构造函数,就继承它的构造函数;
(2)如果最前面第一个父类没有构造函数,则继承第2个的构造函数,第2个没有的话,再往后找,以此类推。