继承
什么是继承
继承讲的通俗一些就是一个类,衍生出了一个类。通常叫做父类与子类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列表找,现在想指名道姓的用某个父类的某个方法,就需要指名道姓的使用