继承是面向对象程序设计的重要特征,也是实现代码复用的重要手段
比如动物世界,父类是动物,哺乳动物是子类,老虎是哺乳动物的子类
python支持多重继承,一个子类可以直接继承多个父类(不推荐,结构会复杂),但JAVA不支持
多个父类同名函数,根据哪个父类在前,在前的父类覆盖在后的父类
如果没有指定,默认父类是object,object是所以类的父类
格式 class 子类类名(父类)
定义子类时在结构函数中必须调用父类的结构函数
格式为 父类名.init(self,参数列表)
子类可重新定义父类中的方法,但会覆盖
mro()可查看class的继承层级结构,后部为父类
super().父类内部函数名 得到/直接调用父类内部定义的方法/对象,而不是说新建一个对象
子类可以重写从父类继承的方法
#Student-person-object
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age #私有属性只有父类才能直接用
def say_age(self):
print('aaa')
class Student(Person):
def __init__(self,name,age,score): #
Person.__init__(self,name,age) #必须显式的调用父类初始化方法,不然解释器不回去调用
self.score=score
def say_age(self):
print('已被重写')
s=Student('123',18,20)
s.say_age()
print(s._Person__age) #子类想用必须用调用私有属性方法调用
class A:
def aa(self):
print('aa')
class B:
def aa(self):
print('bb')
def say(self):
print('测试super')
class C(B,A):
def say(self):
print('b')
super().say()
c = C()
c.aa()
print(C.mro())
C().say()
已被重写
18
bb
[<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
b
测试super