目录
继承的初识
继承概念:继承是类与类的一种关系,是一种子类与父类的关系,即爸爸与儿子,爸爸生个儿子,儿子继承爸爸的属性和方法。
总的来说,编写类不一定要从空白开始,我们也可以利用一个现成的版本,就是可以使用继承当一个类,如果继承另一个类的时候,就会自动把所有的属性和方法复制过来也就叫父类,这个新形成类,直接会把父类的所有属性方法同时继承,还可以定义属于自己的属性和方法
下面我们举一个例子
class Animal: def __init__(self,name,aggr,hp): self.name = name self.aggr = aggr self.hp = hp class Dog(Animal): def bite(self,person): person.hp -= self.aggr class Person(Animal): pass wc = Dog('旺财',100,500) print(wc.name)
继承的规则
继承的规则是,如果子类没有的属性和方法,就会去找父类,如果父类再没有的话,就会去找object类,因为所有类都是默认继承object类,如果还找不到的话,程序就会报错,但是如果子类和父类同时拥有一个相同的方法,那么子类就不会再去找父类,而是会从自己的方法中寻找使用自己的方法,这个是继承的一大很重要的特性
下面就再来举一个例子
class Animal: def __init__(self,name,aggr,hp): self.name = name self.aggr = aggr self.hp = hp def eat(self): print(f'{self.name}已经吃药回血') self.hp += 100 class Dog(Animal): def __init__(self,name,aggr,hp,kind): Animal.__init__(self,name,aggr,hp) self.kind = kind #派生属性 def eat(self): #如果既想实现新的功能也想使用父类原本的功能,还需要在子类中再调用父类 Animal.eat(self) self.teeth = 2 def bite(self,person): #派生方法 person.hp -= self.aggr class Person(Animal): def __init__(self,name,aggr,hp,kind): Animal.__init__(self,name,aggr,hp) self.kind = kind #派生属性 jin = Dog('旺财',100,500,'泰迪') print(jin.name) alex = Person('alex',1,2,None) alex.eat() print(alex.hp) jin.bite(alex) print(alex.hp)
继承的两大种类
在Python中继承有两大种类,一种是单继承,一种是多继承,单继承顾名思义就是只有一个父亲,也就是一个父类,而多继承就是可以继承一个或多个父类的属性和方法,注意,如果多个父类中有同名的属性和方法,就会不能使用第1个父类的属性和方法,这时我们就会使用到广度优先深度优先的原则,多个父类不重名的属性和方法就不会有这种影响,在Python中强调和合理的继承,可以使代码的效率更加的提高,减少代码的重用性
小结
父类中没有的属性 在子类中出现 叫做派生属性
父类中没有的方法 在子类中出现 叫做派生方法
只要是子类的对象调用, 子类中有的名字 一定是用子类的 ,子类中没有的才找父类
如果父类中也没有就会报错
如果父类 子类都有 则用子类的
如果还想用父类的 则需要单独调用父类的,需要自己传self参数