文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一日一技:如何让 Python 提醒你不能覆盖某个父类方法?

2024-12-02 20:26

关注

在前几天的文章:一日一技:在 Python 里面如何实现一个抽象类中,我们讲到Python 可以实现一个抽象类。抽象类里面有一些抽象方法,在继承这个抽象类的时候,子类必须实现这些抽象方法。

有时候,我们希望在父类中保留一些方法,子类在继承父类的时候,不准覆盖这些方法。这个功能,在 Java 中叫做@final。

Python 原生的语句和关键词,无法禁止开发者覆盖父类的某个方法。但是,如果你需要的不是禁止,而是在你不小心覆盖的时候,Python 能提醒你的话,那么 Python 从3.8开始就能原生做到。这就是类型标注中的final关键字。

如果你不知道什么叫做类型标注,或者不知道它有什么用,那么你可以看我以前的两篇文章:《一日一技:在Python中使用类型标注》、《一日一技:通过Python 3的类型标注提高PyCharm的自动补全能力》。

要使用这个功能,有一个前提,就是你需要使用 PyCharm 或者 VSCode 这种支持识别类型标注的 IDE,或者你的项目使用 mypy 来做静态检查。我们以 PyCharm 为例。

打开 PyCharm,我们来写一个类:

  1. class Animal: 
  2.     def walk(self): 
  3.         ... 
  4.  
  5.     def dead(self): 
  6.         print('所有生物都会死亡,没有例外'
  7.  
  8.  
  9. class Dog(Animal): 
  10.     def __init__(self, name): 
  11.         self.name = name 
  12.      
  13.     def walk(self): 
  14.         print('使用四只脚走路'
  15.  
  16.     def dead(self): 
  17.         print('狗不会死亡'
  18.  
  19.  
  20. wangcai = Dog('旺财'
  21. wangcai.walk() 
  22. wangcai.dead() 

运行效果如下图所示:

可以看到,子类Dog覆盖了父类Animal里面的两个方法walk和dead。现在,我不想让开发者覆盖dead方法,如果发现他覆盖了,就要通过 IDE 发出提醒。这个时候,就可以使用final关键词,如下图所示:

我们只需要from typing import final,然后使用这个装饰器@final来装饰不想被覆盖的方法,那么,当子类试图覆盖它的时候,IDE 就会通过黄色的背景来提醒你这个地方有问题。

在 typing 里面,除了final装饰器,还有一个Final类型。这个类型可以用来设定常量,例如:

  1. from typing import Final 
  2. PI: Final[float] = 3.141592653 
  3.  
  4. PI = 3.2 

运行效果如下图所示:

但需要注意的是,类型标注起的是提醒的作用,如果你要不顾提醒强行违反也没有问题。

 

本文说到的是如何提醒开发者不要覆盖父类方法。我们也可以通过自定义一个装饰器,来实现真正禁止其他人覆盖父类的方法。发现覆盖就报错。如果大家有兴趣,请在本文下面留言,我们下一篇文章就写。

本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code生公众号。

 

来源:未闻Code内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯