所有的类都是object的子类
继承:
class B(A):
class Phone:
def call(self):
print("正在打电话")
def send_msg(self):
print("发送短信")
class Smartphone(Phone):
'''继承了Phone类(Phone是Smartphone的父类),
可以使用Phone的所有方法和属性'''
def caputure_video(self):
print("正在视频")
如果父类和子类有一个方法(属性)重名了,那么子类会使用自己的方法和属性(即重写)
多重继承:class C(A,B...),子类继承多个父类
如果一个方法多个父类都有,子类调用时按继承的父类先后顺序查找(使用print(D.__mro__)查询执行顺序)
菱形问题(面试经常被问到):
BC都继承了A类,然后d继承了A类
执行的是C的(广度优先)
当C不再继承A的时候
执行的是A(深度优先)
如果往上衍生,还继承了其他类,此时我们不知道执行顺序,怎么办?
使用print(D.__mro__)查询执行顺序
超继承:
如果想继承父类的方法,又想加点东西,可以用到super方法
class B(A):
def call(self):
self.age='18'
super().call()#这一句就是调用父类的call方法,而不是自己的