Python子类方法覆盖

Python子类方法覆盖教程

Python 中,如果子类 继承 了父类,那么子类会继承父类所有的 方法属性,此时,如果子类重新定义了父类中的方法,那么就构成了 方法重写,即子类方法重写了父类方法。

如果,子类方法与父类方法名一模一样,但方法 参数 不一致,那么子类方法就会覆盖父类的方法。

Python子类复盖父类方法条件

子类复盖父类方法,必须要子类方法的函数名与父类的一模一样,但函数参数必须不一致。

案例

Python子类复盖父类方法

子类方法名和参数与父类完全一致,构成方法复盖

print("嗨客网(www.haicoder.net)") class Animal: def eat(self): print("I like eat anything") def sleep(self): print("I need sleep for 15 hours a day") class Cat(Animal): def eat(self, food): print("I am a cat, and i just like eat", food) class Dog(Animal): def eat(self, food): print("I am a dog, and i just like eat", food) cat = Cat() cat.eat("fish") cat.sleep() dog = Dog() dog.eat("bone") dog.sleep()

程序运行后,控制台输出如下:

84_python类方法重写.png

我们定义了一个 Animal 类,Animal 类有两个方法,一个是 eat,一个是 sleep,接着,我们定义了一个 Cat 类,Cat 继承自 Animal,和一个 Dog 类,Dog 类同样继承自 Animal。

Cat 类中的 eat 方法与 Dog 类中的 eat 方法的函数名与 Animal 中的一致,但函数参数却不一样,Animal 中的 eat 只有一个 self 参数,而 Cat 类中的 eat 方法却又两个参数。

因为,Cat 类的 eat 方法和 Dog 类的 eat 方法与它们的父类 Animal 的函数名一样,但参数不一致,因此子类 Cat 和 Dog 中的 eat 方法覆盖了父类 Animal 中的 eat 方法。

接着,我们分别实例化了一个 Cat 类和一个 Dog 类,分别调用了 Cat 类的 eat 方法和 sleep 方法,以及 Dog 类的 eat 方法和 sleep 方法,我们发现,Cat 类和 Dog 类都各自输出了自己类中的 eat 方法的内容。现在,我们将程序修改如下:

print("嗨客网(www.haicoder.net)") class Animal: def eat(self): print("I like eat anything") def sleep(self): print("I need sleep for 15 hours a day") class Cat(Animal): def eat(self, food): print("I am a cat, and i just like eat", food) class Dog(Animal): def eat(self, food): print("I am a dog, and i just like eat", food) cat = Cat() cat.eat() cat.sleep() dog = Dog() dog.eat() dog.sleep()

程序运行后,控制台输出如下:

85_python类方法重写.png

这次,我们使用 Cat 和 Dog 调用 eat 方法时,我们去掉了 eat 方法的函数参数,此时程序报错,说明子类 Cat 和 Dog 中已经不存在没有参数的 eat 方法了,即父类 Animal 中的 eat 方法被子类覆盖了。

Python子类调用父类被重写方法

在子类中,通过类名可以显式调用父类被重写方法

print("嗨客网(www.haicoder.net)") class Animal: def eat(self): print("I like eat anything") def sleep(self): print("I need sleep for 15 hours a day") class Cat(Animal): def eat(self, food): print("I am a cat, and i just like eat", food) def eat_delicious(self): print("when i was a child") self.eat("Finish") print("when i grown up") Animal.eat(self) cat = Cat() cat.eat_delicious() cat.sleep()

程序运行后,控制台输出如下:

86_python类方法重写.png

如果子类覆盖了父类方法,我们同样可以使用父类类名的形式来显式的调用父类中被覆盖的方法。

Python子类方法覆盖总结

在 Python 中,如果子类继承了父类,那么子类会继承父类所有的方法和属性,此时,如果子类重新定义了父类中的方法,那么就构成了方法重写,即子类方法重写了父类方法。

如果,子类方法与父类方法名一模一样,但方法参数不一致,那么子类方法就会覆盖父类的方法。Python子类复盖父类方法条件,子类复盖父类方法,必须要子类方法的函数名与父类的一模一样,但函数参数必须不一致。