python笔记 继承续

96 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

0 环境

  • 编辑器:pycharm或者vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 重写方法

私有的不可以继承,怎么会这样,打印实例.__dict__结果,结果如下图:

私有的名称发生的改变,比如我私有的是__private_ins,现在变成了_Base__private_ins,也就是说私有__private_ins前面添加了_类名

image.png

重写方法,子类不存在父类的公共方法,则用父类的,否则子类覆盖,如下代码: 当我注释掉,子类与父类同名的方法时,调用的父类的方法。

class Base:
    def show(self):
        print("Base show!!")

class One(Base):
    def two(self):
        pass

    # def show(self):
    #     print("One show!!!")

if __name__ == '__main__':
    one = One()
    one.show()

image.png

然而当我给子类也加和父类同名的方法,很明显,如下图所示,子类覆盖了父类的方法,打印的One show!!!的结果。

class Base:
    def show(self):
        print("Base show!!")

class One(Base):
    def two(self):
        pass

    def show(self):
        print("One show!!!")

if __name__ == '__main__':
    one = One()
    one.show()

image.png

假如我给这个同名的子类,多加个入参,且父类不变,也就说现在父类和子类的方法同名,但入参不同,会出现什么问题呢,如下图,提示么有name是不是,虽然我本意是,既然入参是空的,应该调用父类的show方法,然而结果不是如此,也就是说,当我子类实例方法和父类同名,但是参数不同,哪怕我想调用父类的方法,也会优先调用子类的方法。 image.png

2 总结

继承很方便复用,无需不停的复制粘贴相同方法,这是直观的好处,还有就是当我不想用父类的方法,且不想被其他人有意或无意调用,我只需要同名父类的方法和入参相同,就可以重写该方法,是不是很nice。还有一点,需要注意的是,虽然我想调用父类的方法,但由于和子类的方法同名,不同参数,子类的实例想调用父类的方法,但还是会调用,并会报参数相关的错。