继承

什么是继承

继承讲的通俗一些就是一个类,衍生出了一个类。通常叫做父类与子类python中一个子类可以继承多个父类,说白了就是可以找多个干爹罩着自己

类的继承

####类的继承
class A:
    def a1(self):
        print('aaa。。。。。')
class B(A):
    pass
    # def a1(self):
    #     # print('bbbbb......')
    #     pass
b1 = B
b1.a1(b1)

多类继承

![无标题](F:\无标题.png)class A:
    def a1(self):
        print('aaa。。。。。')
class B:
    pass
    # def a1(self):
    #     print('bbbbb......')
    #     pass
class C(A,B):
    def a1(self):
        print('ccccc......')
c1 = C
c1.a1(c1)

无标题

子类重构父类方法

子类可以将父类已经有的方法重新写入

####通过
class Student(Person):
    school = 'yyyy'
    def __init__(self,name,age,course):
        #如何重用父类的__init__方法
        Person.__init__(self,name,age)
        self.course=course
    def study(self):
        Person.study(self)
        print("%s学生在学习"%self.name)


stu1=Student('wed',19,"Python")
# stu1.school='xxx'
print(stu1.school)
stu1.study()

#######第二版
class A:
    def a1(self):
        print('aaa。。。。。')
    def __init__(self,name='xigua'):
        self.name = name
        print(name)
class C(A):
    # def a1(self):
    #     print('ccccc......')
    def __init__(self,name):
        A.__init__(self,name)
        self.name = name
c1 = C
c1.__init__(c1,'nihao')

通过super方法修改

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

class Student(Person):
    school = 'yyyy'
    def __init__(self,name,age,course):
        #super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法,会把自己传过去
        ##########    self不需要传,不需要传
        # super().__init__(name,age)
        #看到别人这么写:super(类名,对象)  在py3中为了兼容py2
        #在py3中这么写和省略写法完全一样
        #在py2中必须super(Student,self)写
        super(Student,self).__init__(name,age)
        self.course=course

stu=Student('nick',19,'python')
print(stu.name)
print(stu.age)
print(stu.course)

总结,有继承关系的时候,通常用super,
指名道姓的方式在什么情况下用?
1 没有继承关系
2 如果继承了多个父类,super是按照mro列表找,现在想指名道姓的用某个父类的某个方法,就需要指名道姓的使用