赞
赏
在 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):
print("I am a cat, and i just like eat finish")
class Dog(Animal):
def eat(self):
print("I am a dog, and i just like eat bone")
cat = Cat()
cat.eat()
cat.sleep()
dog = Dog()
dog.eat()
dog.sleep()
程序运行后,控制台输出如下:
我们定义了一个 Animal 类,Animal 类有两个方法,一个是 eat,一个是 sleep,接着,我们定义了一个 Cat 类,Cat 继承自 Animal,Cat 类也有一个与 Animal 类一模一样的方法 eat,Dog 类也有一个与 Animal 类一模一样的方法 eat。
因为,Cat 类的 eat 方法和 Dog 类的 eat 方法与它们的父类 Animal 的函数名与参数一模一样,因此子类 Cat 和 Dog 重写了父类 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):
print("I am a cat, and i just like eat finish")
def eat_delicious(self):
print("when i was a child")
self.eat()
print("when i grown up")
Animal.eat(self)
cat = Cat()
cat.eat_delicious()
cat.sleep()
程序运行后,控制台输出如下:
我们定义了一个 Animal 类,Animal 类有两个方法,一个是 eat,一个是 sleep,接着,我们定义了一个 Cat 类,Cat 继承自 Animal,Cat 类也有一个与 Animal 类一模一样的方法 eat。
同时,我们在 Cat 类中定义了一个 eat_delicious 方法,eat_delicious 中,我们首先使用 self 迪奥了 eat 方法,再次使用 Animal.
的形式再次调用了 eat 方法。
最后,我们发现,使用 self 调用 eat 方法调用的就是 Cat 类自身的 eat 方法,而使用 Animal.
的形式调用的 eat 方法,调用的是 Cat 的父类 Animal 的 eat 方法。
因此,如果,我们需要显式调用父类被重写的方法,可以使用类名的形式来调用。
在 Python 中,如果子类继承了父类,那么子类会继承父类所有的方法和属性,此时,如果子类重新定义了父类中的方法,那么就构成了方法重写,即子类方法重写了父类方法。
如果,我们在子类中需要调用父类中被重写的方法,那么我们可以直接使用类名来显式调用父类中的方法。Python 子类复写父类方法条件:
子类复写父类方法,必须要子类方法的函数名和函数参数与父类的一模一样,如果子类的方法名和父类一致,但参数不一致,那么不构成方法重写,而是方法覆盖。