继承
在python中
一个类可以被多个类继承
一个类也可以继承多个父类
继承的目的:
当一个类的一些属性与另一个类中的属性重合,而如果有很多类出现这样的情况,
就会造成大量的重复代码,为了解决这类问题就用到了继承
继承的是子类,被继承的父类
继承的本质是:将一些类中共有的属性挑出来放进一个父类中,所有的子类从这个父类中继承属性
class Dog: def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别 self.name = name self.master = master self.sex = sex class Husky(Dog): #在这里写上Husky类继承Dog类 pass #这里面布放东西 gou = Husky('二哈','二狗子','公') #在这里实例化一个狗 print(gou.name) #依然可以打印出它的名字,主人,性别 print(gou.master) print(gou.sex)
二哈
二狗子
公
这个就是继承,因为继承一个类,也叫单继承
子类甚至还能调用父类的方法
class Dog: def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别 self.name = name self.master = master self.sex = sex def attack(self): print('%s咬人啦'%(self.name)) class Husky(Dog): #在这里写上Husky类继承Dog类 pass #这里面布放东西 gou = Husky('二哈','二狗子','公') #在这里实例化一个狗 gou.attack()
二哈咬人啦
class Dog: def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别 self.name = name self.master = master self.sex = sex def attack(self): print('%s咬人啦'%(self.name)) class Husky(Dog): #在这里写上Husky类继承Dog类 def attack(self): print('%s没有咬到人'%(self.name)) gou = Husky('二哈','二狗子','公') #在这里实例化一个狗 gou.attack()
二哈没有咬到人
但是,如果子类中有的方法,就会先用自己的,如果自己没有才会带父类中去找,如果没有找到就会报错
派生
class Dog: def __init__(self,name,master,sex): self.name = name self.master = master self.sex = sex class Husky(Dog): def __init__(self, name, master, sex,kind): #将自己的属性写在这里 Dog.__init__(self, name, master, sex) #将父类的属性写在这里 self.kind = kind #这里只用将自己多的写出来就行了 def attack(self): print('%s没有咬到人'%(self.name)) gou = Husky('二哈','二狗子','公','哈士奇') gou.attack() #这种父类中没有方法叫派生方法 print(gou.kind) #这种父类中没有的属性叫派生属性
二哈没有咬到人
哈士奇
多继承
顾名思义,继承多个类,就是多继承
class Dog1: def __init__(self,name,sex,master,kind): #这个类里写姓名性别主人和品种 self.name = name self.sex = sex self.master = master self.kind = kind class Dog2: def __init__(self): #这里什么都不写 pass def attack(self): #在这里写个方法 print('哈士奇又要咬人了') class Husky(Dog1,Dog2): #这里写Husky类继承了Dog1和Dog2 pass gou = Husky('二哈','公','二狗子','哈士奇') #实例化一个gou对象 print(gou.name) #打印gou的名字 gou.attack() #同时这个对象又调用Dog2中的方法
二哈
哈士奇又要咬人了
总结一下:
父类中没有的属性 在子类中出现 叫做派生属性
父类中没有的方法 在子类中出现 叫做派生方法
只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类也没有报错
如果父类 子类都有 用子类的
如果还想用父类的,单独调用父类的:
父类名.方法名 需要自己传self参数
super().方法名 不需要自己传self
正常的代码中 单继承 === 减少了代码的重复
继承表达的是一种 子类是父类的关系