Python父类方法重写(入门必读)

樵夫2021-09-17 10:48

    前面讲过在Python中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。

    但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的,但有个别的类方法,并不能直接照搬父类的,如果不对这部分类方法进行修改,子类对象无法使用。针对这种情况,我们就需要在子类中重复父类的方法。

    举个例子,鸟通常是有翅膀的,也会飞,因此我们可以像如下这样定义个和鸟相关的类:

class Bird:
    #鸟有翅膀
    def isWing(self):
        print("鸟有翅膀")
    #鸟会飞
    def fly(self):
        print("鸟会飞")

    但是,对于鸵鸟来说,它虽然也属于鸟类,也有翅膀,但是它只会奔跑,并不会飞。针对这种情况,可以这样定义鸵鸟类:

class Ostrich(Bird):
    # 重写Bird类的fly()方法
    def fly(self):
        print("鸵鸟不会飞")

    可以看到,因为Ostrich继承自Bird,因此Ostrich类拥有Bird类的isWing()和fly()方法。其中,isWing()方法同样适合Ostrich,但fly()明显不适合,因此我们在Ostrich类中对fly()方法进行重写。

    重写,有时又称覆盖,是一个意思,指的是对类中已有方法的内部实现进行修改。

    在上面2段代码的基础上,添加如下代码并运行:

class Bird:
    #鸟有翅膀
    def isWing(self):
        print("鸟有翅膀")
    #鸟会飞
    def fly(self):
        print("鸟会飞")
class Ostrich(Bird):
    # 重写Bird类的fly()方法
    def fly(self):
        print("鸵鸟不会飞")
# 创建Ostrich对象
ostrich = Ostrich()
#调用 Ostrich 类中重写的 fly() 类方法
ostrich.fly()

    运行结果为:

鸵鸟不会飞

    显然,ostrich调用的是重写之后的fly()类方法。

    如何调用被重写的方法

    事实上,如果我们在子类中重写了从父类继承来的类方法,那么当在类的外部通过子类对象调用该方法时,Python总是会执行子类中重写的方法。

    这就产生一个新的问题,即如果想调用父类中被重写的这个方法,该怎么办呢?

    很简单,前面讲过,Python中的类可以看做是一个独立空间,而类方法其实就是出于该空间中的一个函数。而如果想要全局空间中,调用类空间中的函数,只需要在调用该函数是备注类名即可。举个例子:

class Bird:
    #鸟有翅膀
    def isWing(self):
        print("鸟有翅膀")
    #鸟会飞
    def fly(self):
        print("鸟会飞")
class Ostrich(Bird):
    # 重写Bird类的fly()方法
    def fly(self):
        print("鸵鸟不会飞")
# 创建Ostrich对象
ostrich = Ostrich()
#调用 Bird 类中的 fly() 方法
Bird.fly(ostrich)

  程序运行结果为:

鸟会飞

    此程序中,需要大家注意的一点是,使用类名调用其类方法,Python不会为该方法的第一个self参数自定绑定值,因此采用这种调用方法,需要手动为self参数赋值。

    通过类名调用实例方法的这种方式,又被称为未绑定方法。

    以上就是小编为大家准备的“Python父类方法重写(入门必读)”一文,更多相关内容尽在开课吧广场Python教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享