什么是继承
子承父类,就相当于把一些公共方法封装成一个类,当需要用到这个类里面的功能,就继承该类就可以使用里面的功能了。子类继承了父类也可以使用父类的父类的功能。
私用方法或属性不能被继承。
继承实例
# 创建a类继承object类(所有的类默认都是继承object类)
class A(object):
def a_func(self):
print('这是a类的功能')
# 创建b类,继承a类
class B(A):
def b_func(self):
print('这是b类的功能')
# 实例化a类(创建x对象)
x = A()
x.a_func()
# 实例化b类(创建y对象)
y = B()
y.a_func() # 调用父类的功能
y.b_func()
运行结果
这是a类的功能
这是a类的功能
这是b类的功能
重写
子类继承了父类时,如果你觉得父类的方法不是你想要的方法,
你可以在自己的类里面写一个和父类名字一模一样的方法名,把你想要的功能从新写入。既是重。
因为程序是先找子类有没有该方法,如果没有则到父类去找,如果有的话直接使用子类的方法。
重写实例
# 创建a类继承object类(所有的类默认都是继承object类)
class A(object):
def a_func(self):
print('这是a类的功能')
# 创建b类,继承a类
class B(a):
def b_func(self):
print('这是b类的功能')
# 重写父类方法
def a_func(self):
print('这是重写a类后的功能')
# 子类重写了父类的功能,但还是想用父类的功能
def b_func2(self):
A.a_func(self) # 可以通过:父类名.被重写的方法名(self):调用
A().a_func() # 第二种调用方式
super().a_func() # 第三种调用方式
# 实例化a类(创建x对象)
x = A()
x.a_func()
# 实例化b类(创建y对象)
y = B()
y.a_func() # 此时调用的是被重写后的方法
y.b_func()
y.b_func2()
运行后的结果
这是a类的功能
这是重写a类后的功能
这是b类的功能
这是a类的功能
这是a类的功能
这是a类的功能
多继承
一个子类继承多个父类。
多继承实例
# 创建a类继承object类(所有的类默认都是继承object类)
class A(object):
def a_func(self):
print('这是a类的功能')
# 创建b类
class B(object):
def b_func(self):
print('这是b类的功能')
# 创建c类型 继承a类和b类
class C(A, B):
def c_func(self):
print('这是c类的功能')
# 创建z对象
z = C()
z.a_func()
z.b_func()
z.c_func()
运行结果
这是a类的功能
这是b类的功能
这是c类的功能
多继承类的方法调用顺序:首先,先找他自己的方法,如果没有则找第一个父类的方法,再找第二个父类的方法,直到object类。
print(子类名.__mro__)可以查看调用方法的顺序
注意:多继承时,被继承的父类之间不能有继承关系否则会报错!!!