当前位置: 首页 > 科技观察

每日一技能:如何让Python提醒你不能重写父类的方法?

时间:2023-03-22 11:34:25 科技观察

前几天的文章:一天一技能:如何用Python实现抽象类,讲了Python是如何实现抽象类的。抽象类中有一些抽象方法。在继承这个抽象类时,子类必须实现这些抽象方法。有时,我们希望在父类中保留一些方法,子类在继承父类时不允许重写这些方法。此功能在Java中称为@final。Python的原生语句和关键字不能阻止开发人员重写父类的方法。但是,如果你需要的不是禁止,而是Python可以在你不小心覆盖的时候提醒你,那么Python从3.8开始就可以原生了。这是类型注释中的final关键字。如果你不知道什么是类型注解,或者它有什么用,那么你可以看我之前的两篇文章:《一日一技:在Python中使用类型标注》,《一日一技:通过Python 3的类型标注提高PyCharm的自动补全能力》。要使用这个功能,有一个前提,就是你需要使用PyCharm或者VSCode这种支持识别类型注解的IDE,或者你的项目使用mypy进行静态检查。我们以PyCharm为例。打开PyCharm,我们来写一个类:classAnimal:defwalk(self):...defdead(self):print('Allcreatureswilldiewithoutexception')classDog(Animal):def__init__(self,name):self。name=namedefwalk(self):print('四条腿走路')defdead(self):print('狗不死')wangcai=Dog('旺财')wangcai.walk()wangcai.dead()运行效果如下图所示:可见子类Dog覆盖了父类Animal中的walk和dead这两个方法。现在,我不希望开发人员覆盖dead方法。如果发现他覆盖了,他必须通过IDE发送提醒。这时候可以使用final关键字,如下图:我们只需要from输入importfinal,然后使用@final这个装饰器来装饰你不想被重写的方法。然后,当子类试图覆盖它时,IDE会通过黄色背景提醒你这个地方有问题。在打字中,除了final装饰器,还有Final类型。这个类型可以用来设置常量,例如:fromtypingimportFinalPI:Final[float]=3.141592653PI=3.2运行效果如下图所示:但需要注意的是类型标签是提示,如果你想强行无视提醒违规是没有问题的。这篇文章讲的是如何提醒开发者不要重写父类的方法。我们也可以通过自定义一个装饰器来实现一个真正禁止别人重写父类的方法。如果发现覆盖,则报告错误。有兴趣的请在本文下方留言,我们会写下一篇。本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系UnheardCode同学?。