Python-方法重写
时间:2020-02-23 14:43:01 来源:igfitidea点击:
在本教程中,我们将学习Python中的方法重写。
什么是方法重写?
当子类中的方法与父类中的方法具有相同的名称和类型签名时,则认为子类方法将覆盖父类方法,这就是方法覆盖。
方法覆盖的示例
在下面的Python程序中,我们将在子类SuperAwesome中重写父类Awesome的greetings方法。
# parent class class Awesome: def greetings(self, message = "Hello World"): print("Greetings from Awesome:", message) # child class class SuperAwesome(Awesome): # overriding the method of the parent class def greetings(self, message = None): if message != None: print("Greetings from SuperAwesome:", message) else: print("Greetings from SuperAwesome!") # objects pObj = Awesome() # parent class object cObj = SuperAwesome() # child class object # method call pObj.greetings() pObj.greetings('Hello!!!') cObj.greetings() cObj.greetings('Hello!!!')
执行上述代码后,我们将获得以下输出。
Greetings from Awesome: Hello World Greetings from Awesome: Hello!!! Greetings from SuperAwesome! Greetings from SuperAwesome: Hello!!!
在上面的代码中,父类的" greetings"方法在子类中被覆盖。
我们正在使用父类创建一个对象,并使用子类创建一个对象。
首先,我们使用父类对象" pObj"调用父类的greetings方法。
这给了我们输出的前两行。
接下来,我们通过子类对象cObj
调用greetings方法,并获得输出的最后两行。
父类的访问重写方法
我们使用super()方法从子类内部调用父类的重写方法。
在下面的Python程序中,我们从SuperAwesome子类内部调用Awesome类的重写方法。
# parent class class Awesome: def greetings(self, message = "Hello World"): print("Greetings from Awesome:", message) # child class class SuperAwesome(Awesome): # overriding the method of the parent class def greetings(self, message = None): if message != None: print("Greetings from SuperAwesome:", message) # calling the overridden parent class greetings method super().greetings(message) else: print("Greetings from SuperAwesome!") # objects cObj = SuperAwesome() # child class object # method call cObj.greetings() cObj.greetings('Hello!!!')
上面的代码将为我们提供以下输出。
Greetings from SuperAwesome! Greetings from SuperAwesome: Hello!!! Greetings from Awesome: Hello!!!