方法的重写, 指的是在子类继承父类时, 子类可以对父类的方法进行重写
重写, 也叫覆盖, 更通用的说法是, 覆盖重写
应用场景是, 当继承的方法已经不能满足时, 或逻辑发送改变
简单的重写覆盖实例
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
class Dog(Animal):
def eat(self): #对原方法进行了重写覆盖
print("吃骨头")
wangcai = Dog() #创建一个dog对象
wangcai.eat() #dog类覆盖后的方法
重写的方式, 是在子类定义一个同名的方法, 那么再调用时默认使用子类重写后的方法
扩展重写实例
此外, 还有一种扩展重写的说法, 但这并不准确, 它本质是调用了父类被覆盖的方法
我们可以在重写时, 既保留父类方法的代码, 又增添一些, 这里需要用到super关键字
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
class Dog(Animal):
def eat(self): #对原方法进行了重写覆盖
super().eat() #保留父类的eat, 并进行扩展
print("吃骨头")
wangcai = Dog() #创建一个dog对象
wangcai.eat() #dog类覆盖后的方法
super()表示父类对象, super().xxx 这是python3特有的方式, 它会按照继承链, 按顺找到最近的属性或方法
ps: 对于py2版本, 使用 父类名.方法(self) 方式调用父类方法, py3仍支持, 但不推荐