继承的目的就是简化代码
class A: # 父类,基类,超类
pass
class B:
pass
class A_son(A, B): # 子类,派生类
pass
print(A_son.__bases__) # 看你继承了谁
print(A.__bases__) # Python3里的类都是新式类 # 没有继承父类,默认继承object
一个类可以被多个类继承
一个类也可以继承多个类
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): # 定义一个人类,也继承自动物类
def attack(self, dog):
dog.hp -= self.aggr
class Animal:
def __init__(self):
print("执行Animal.__init__")
self.func()
def eat(self):
print('%s eating' % self.name)
def drink(self):
print('%s drinking' % self.name)
def func(self):
print("Animal.func")
class Dog(Animal):
def guard(self): # 父类中没有的方法在子类中出现,叫做派生方法
print('garding')
def func(self):
print('Dog.func')
dog = Dog()
父类中没有的属性在子类中出现 叫做 派生属性,
子类的对象调用,子类中有的名字一定用子类的,子类中没有才找父类的,如果父类也没有则报错
如果父类子类都有,用子类的,
正常的代码中,单继承 === 减少了代码的再重复
继承表达的是一种 子类是父类的关系
如果还想用父类的,则需要单独调父类的:
父类名.方法名 需要传self参数
supe().方法名 不需要传self参数
class Animal:
def __init__(self, name, aggr, hp):
self.name = name
self.aggr = aggr
self.hp = hp
def eat(self):
print('吃药回血')
self.hp += 100
class Dog(Animal):
def __init__(self, name, aggr, hp, kind):
Animal.__init__(self, name, aggr, hp)
# 或者super().__init__(name, aggr, hp)
self.kind = kind # 派生属性
def bite(self, person): # 派生方法
person.hp -= self.aggr
def eat(self): # 如果既想实现新的功能也想实现父类的功能,则需要在子类中调用父类
Animal.eat(self)
self.teeth = 2