继承:子类继承父类,子类可以使用父类的属性和方法,简化代码。
子类继承父类,父类派生子类
当生成子类对象时,先初始化父类对象,所以如果父类有__init__()方法,并且有属性时,要通过子类的构造赋值一个类可以有多个子类
初始化时...在子类中,调用父类的属性时,在__init__()方法中使用
父类.属性,或self.属性或父类.__init__(self,参数)或super(子类,self).__init__(参数)调用子类的父类的__init__四种方法给父类传参
方法重写:子类继承父类时,子类的方法签名和父类一样,此时子类重写了父类的方法,当生成子类对象时,调用的是子类重写的方法
父类()
子类(父类)
三代继承:子类初始化方法需要祖父,父类及自己的属性,可以调用父类的吃实话方法传参,可以重写父类的方法
构造的顺序依然先构造祖父类,在构造父类,最后构造自己继承object
方法重写:如果子类重写的方法想调用父类的方法时,在子类方法中:父类.方法(self)或super().父类方法()
私有属性、私有方法:均不能在类外面被调用
多继承:类同时继承多个父类,classC(A,B),当有AB均有相同方法,而子类又重写时,调用谁的(子类)方法,如果子类没有方法,则调用哪个父类的方法?(左侧,优先继承的类)
类名.mro(),可以看到所有父类,即搜索顺序
交通工具类
class Vehicle:
def __init__(self):
self.name=""
'''
def __init__(self,name):
self.name=name;
print('交通工具类被初始化,创建出来')
'''
def run(self):
print('交通工具在行驶....')
def show(self):
print('车的名字是%s'%self.name)
class cixunfu:
def run(self):
print('在磁悬浮轨道上行驶..')
卡车,属性:载重,重写行驶的方法
class Truck(Vehicle):
def __init__(self,name,weith):
Vehicle.name=name;
self.ame=name;
Vehicle.__init__(self,name);
super(Truck,self).__init__(name);
self.weith=weith;
print('卡车被初始化 创建出来')
方法重写
def run(self):
父类.方法(self)或super().父类方法()
super().show()
super(Truck,self).show()
Vehicle.show(self);
print('%s卡车载重%d 吨在行驶....'%(self.name,self.weith))
火车,属性:车箱个数,重写行驶的方法
class Trian(cixxunfu,Vehicle):
def __init__(self,name,nums):
self.name=name;
self.nums=nums
def run(self):
print('火车在轨道上呜呜的开...')
class student:
def goHome(self,Vehicle):
vehicle.run()
print('学生在回家的途中...')
class tui:
def run(self):
print('2条腿儿在行驶...')
t=Truck('东风',15);
t.run()
c=Trian('京沪高铁',30);
c.run();
ok=Trian('马航730',30);
daizhong=tui();
xinpeng=student();
xinpeng.goHome(daizhong);