面向对象----继承
继承 -- 需要解决代码的重复
继承语法:
class A:
pass
class B(A):
pass
B继承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.drink
class 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)
单继承
- 调子类的:子类自己有的时候
- 调父类的:子类自己没有的时候
- 调子类和父类,子类父类都有的时候,在子类中调用父类
多继承
- 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的先寻找