1.继承的两种含义:
含义一,继承基类的方法,并且做成自己饿改变或者扩展(代码重用),一般很少用到,不利于维护。
#含义一,eg class Animal: def __init__(self,color,name): self.color = color self.name = name def call(self): print('叫') class cat(Animal): def call(self): print('喵喵叫') class dog(Animal): def call(self): print('汪汪叫') c = cat('black','baby') print(c.name) c.call() d = dog('black','pupy') print(d.name) d.call()
含义二,声明某个自雷兼容与某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法。
#含义2,eg,用abc模块,如果继承的类没实现abc.stractmethod方法,则报错 import abc class file(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): pass class memery(file): def read(self): print('read....') def write(self): print('write...') m1 = memery() m1.read()
2.在子类中调用父类的方法
class Vehicle: Country = 'China' def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print('开动啦') class Subway(Vehicle): def __init__(self,name,speed,load,power,line): Vehicle.__init__(self,name,speed,load,power) self.line = line def run(self): print('%s%d号线开动啦'%(self.name,self.line)) s1 = Subway('地铁','80km/h',20000,50,6) s1.run()
3.继承的顺序
#1.新式类:python3创建的类都是新式类,pyhton2 创建方式为 class Foo(object): 为新式类
#2.经典类:python2中创建类的方式是 class Foo(): 为经典类
#当一个类继承多个父类时,继承顺序分为深度继承跟广度继承,新式类为广度优先继承,经典类为深度优先继承
#新式类都可以调用__mro__的方法查看继承顺序
#经典类继承的方式为:假如B,C继承A,D继承B,E继承C,F继承D,E,则根据深度优先,继承顺序为F->D->B->A->E->C
#新式类的继承方式为:假如B,C继承A,D继承B,E继承C,F继承D,E,则根据广度优先,继承顺序为F->D->B->E->C->A