继承
关于继承,就是儿子获得了父亲的东西
# class Animal: # 当没有写父类时,默认继承自object class Animal(object): def __init__(self, name): self.name = name def run(self): print('小动物喜欢一天到晚跑个不停') # 定义一个子类,继承自Animal class Dog(Animal): pass d = Dog('旺财') # 可以直接拥有父类的属性 print(d.name) # 也拥有父类的行为 d.run()
派生
关于派生,就是儿子除了获取父亲拥有的所有的东西以外,还拥有独属于自己的东西,例:
class Animal: def run(self): print('一天到晚跑个不停') class Cat(Animal): def eat(self): print('猫喜欢吃鱼')
在这里 子类Cat 继承了父类Animal的所有方法,但是eat这个方法是子类独有的,这就是派生
重写
关于重写,相当于儿子继承了父亲的一栋房子,这个时候儿子对这个房子会有集中情况:
- 某一间房子对他完全没有用,这个时候就需要把他推掉,重新盖一个对自己有用的了
class Animal: def run(self): print('小动物喜欢到处跑') class Cat(Animal): # 父类方法完全不合适,覆盖重写 def run(self): print('猫喜欢走猫步')
就像这样,父类(Animal)中的run方法对子类(Cat)完全不合适,子类就将这个run方法覆盖重写
2. 某一间房子对他有用,但是还需要加一些东西才完美,这样就需要在原有的基础上加一点东西
class Animal: def eat(self): print('小动物喜欢吃东西') class Cat(Animal): # 父类的方法不够完善,需要添加完善 def eat(self): # 保留父类方法的内容 # Animal.eat(self) # 不建议使用 # super(Cat, self).eat() super().eat() # 推荐使用 # 添加完善的内容 print('猫喜欢吃鱼')就像这样,父类(Animal)中的eat方法对子类(Cat)有用,但是子类还需要完善一点,在原父类方法的基础上继续加点东西使用
多继承
关于多继承,意思就是一个人可以继承多个人的东西。
class A: def test(self): print('in class A func test...') class B: def test(self): print('in class B func test...') def eat(self): print('in class B func eat ...') class C(A, B): def eat(self): # 默认的方式找父类,跟不重写方法时的顺序是一样的, # 按照书写的先后顺序,默认是写在前面的类的方法 # super().eat() # 明确指定调用哪个父类的方法 B.eat(self)
就像这样,一个类可以继承多个类,但是如果继承的这几个类中有相同方法名的方法时,会根据传入的先后顺序进行调用的,如果不想按顺序使用的话,需要在C这个类中新建一个相同的方法,在方法中特别指明调用的哪个父类的方法