Python子类重写父类方法和调用父类同名方法

一、方法重写

在Python中,子类有时不适合使用父类的方法,那么可以重写(Override)父类方法,

如下面的例子,工作日7:30起床,但是周日可以9点起床:

环境:Windows,Python3.7

class BaseClass:
    def __init__(self, day):
        self.day = day

    def wake_up(self):
        print('Attention: %s\'s wake up time is 7:30 am.' % self.day)

class SubClass(BaseClass):
    def __init__(self, day):
        super().__init__(day)

    def wake_up(self):
        print('Today is %s and I will get up at 9:00 am.' % self.day)

test_case = SubClass('Sunday')
test_case.wake_up()

运行一下,结果为:

此时子类方法覆盖了父类方法。

二、调用父类同名方法

有时子类重写父类方法时,只想在父类方法上进行扩展,就可以先调用父类同名方法,再扩展。

但是怎么调用父类同名方法呢?

虽然子类继承了父类方法,但是直接在子类同名函数func()下写self.func(),实际调用的是子类方法func()本身,因为子类方法已经重写了,结果运行代码时造成深度递归,也无法正确实现。

查看上面的代码段,在写子类的构造函数时,super().__init__(day)就是在调用父类的构造函数,由此可知在调用父类的同名方法时,使用super().func()即可。

比如上面的例子,周日要加班了,那么起床时间也是7:30,并且不开心。子类的wake_up函数改为:

    def wake_up(self):
        super().wake_up()
        print('NOT HAPPY!')

 运行一下,结果为:

 

你可能感兴趣的:(python,调用父类同名函数,重写方法)