Python多继承使用详解

版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 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个没有的话,再往后找,以此类推。

猜你喜欢

转载自blog.csdn.net/qq_26442553/article/details/81775449