面向对象----继承
继承 -- 需要解决代码的重复
继承语法:
class A: passclass B(A): passB继承A,A是父类,B是子类A是父类 基类 超类B是子类 派生类字类可以使用父类中的:方法 静态变量class Animal: def __init__(self,name): self.name = name def eat(self): print(f'{self.name} is eating') def drink(self): print(f'{self.name} is drinking') def sleep(self): print(f'{self.name} is sleeping')class Cat(Animal): def climd_tree(self): print(f'{self.name} is climbing')class Dog(Animal): def house_keep(self): print(f'{self.name} is keeping')小白 = Cat('小白')小白.eat()#先开辟空间,空间理由一个类指针指向Cat#调用init,对象在自己的空间找init没有找到,到Cat类找init也没有找到,找父类Animal中的init当子类和父类的方法重名的时候,我们只是用子类的方法,而不会去调用父类的方法class Animal: def __init__(self,name): self.name = name def eat(self): print('%s is eating'%self.name) def drink(self): print('%s is drinking'%self.name) def sleep(self): print('%s is sleeping'%self.name)class Cat(Animal): def eat(self): print(f'{self.name}吃猫粮') def climb_tree(Self): print(f'{self.name} is climbing')小白 = Cat('小白')小白.eat子类想要调用父类的方法的同时还想执行自己的同名方法猫和狗在调用eat的时候即调用自己的也调用父类的在字类的方法中调用父类的方法:父类名.方法(self) class Animal: def __init__(self,name,food): self.name = name self.food = food self.blood = 100 self.waise = 100 def eat(self): print(f'{self.name} is {self.food}') def drink(self): print(f'{self.name} is drinking') def sleep(self): print(f'{self.name} is sleeping') class Cat(Animal): def Cat(self): self.bood += 100 Animal.eat(self) def climb_tree(self): print(f'{self.name} is climbing') self.drinkclass Dog(Animal): def eat(self): self.waise += 100 Animal.eat(self) def house_keep(self): print(f'{self.name} is keeping')小白 = Cat('小白','猫粮')小黑 = Dog('小黑','狗粮')小白.eat()小黑.eat()继承语法 class 子类名(父类名):pass父类和子类方法的选择: 子类的对象,如果去调用方法,永远优先调用自己的 如果自己有 用自己的 自己没有,用父类的 自己有 还想用父类的:直接在子类方法中调用父类的方法 父类名.方法名(self)
单继承
- 调子类的:子类自己有的时候
- 调父类的:子类自己没有的时候
- 调子类和父类,子类父类都有的时候,在子类中调用父类
多继承
- 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的先寻找