Python 知识要点:方法的重写

【父类的私有方法和私有属性】

子类对象不能在自己的方法内部直接访问父类的私有属性和私有方法。

子类对象可以通过父类的公有方法间接访问到私有属性或私有方法。

 

当父类的方法实现不能满足子类的需求时,可以在子类中对方法进行重写(override)

重写父类方法有两种情况:覆盖父类的方法;对父类方法进行扩展。

 

【覆盖父类方法】

子类中定义一个和父类同名的方法

 

【对父类方法进行扩展】

在子类中重写父类的方法,在需要的位置用 super.父类方法 来调用父类方法的执行,

然后在子类方法的其他位置,根据需求,编写子类特有的代码实现

 

【关于super】

Python中 super 是一个特殊的类

super() 就是使用super类创建出来的对象

最常使用的场景就是重写父类方法时,调用在父类中封装的方法实现

 

另一种调用父类的方法:父类名.方法(self)

不推荐使用,因为一旦父类发生变化,方法调用位置的类名同样需要修改

开发时,父类名和super()两种方法不要混用

 

【提示】:如果使用当前子类名调用方法,会形成递归调用,出现死循环

 

# 父类
class A:
    def foo(self):
        print("父类方法1")

    def func(self):
        print("父类方法2")


# 子类
class B(A):
    # 重写覆盖父类方法 foo
    def foo(self):
        print("重写后方法1")

    # 扩展父类方法 func
    def func(self):
        # 先调用父类原有方法
        super().func()
        # 再在子类中扩展父类方法
        print("扩展功能")


B().foo()
print()
B().func()

 

posted @ 2020-06-24 14:49  颗粒成仓  阅读(369)  评论(0编辑  收藏  举报