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!!!