当前位置:  开发笔记 > 编程语言 > 正文

为什么Python中没有@override装饰器来帮助编写代码可读性?

如何解决《为什么Python中没有@override装饰器来帮助编写代码可读性?》经验,为你挑选了2个好方法。

我一直在使用Python中的抽象类ABCMeta.当你编写一个抽象方法时,你用装饰器标记它@abstractmethod.我发现奇怪的一件事(和其他语言不同)是当子类重写超类方法时,没有@override提供类似的装饰器.有谁知道这背后的逻辑是什么?

这使得读取代码的人快速确定哪些方法覆盖/实现抽象方法与仅存在于子类中的方法有点混淆.



1> user2357112 ..:

尝试添加的问题@override是在方法定义时,装饰器无法判断该方法是否实际覆盖了另一个方法.它无权访问父类(或当前类,甚至还不存在!).

如果要添加@override,@override装饰器实际上不能执行任何覆盖检查.然后你有两个选择.无论是有无覆盖检查,在此情况下,@override没有比一个更好的意见或type构造函数需要具体了解@override,并在类的创建时间检查.像这样的便利功能@override不应该像这样复杂类型系统实现的核心部分.此外,如果您不小心@override使用了非方法,则在您尝试调用修饰函数并获得奇怪的TypeError之前,该错误将不会被检测到.



2> Daniel Rosem..:

你将Python装饰器与Java注释混淆了.尽管语法相似,但它们完全不同.Java注释是对编译器的指令.但是Python装饰器是可执行代码,可以执行具体的操作:它将函数包装在另一个可以改变其功能的函数中.这与abstractmethod的情况一样,与任何其他装饰器一样多; 它做了一些事情,即告诉ABC有一种方法需要覆盖.


@ShadowRanger` @ Override`不仅仅用于文档目的(为此,你*可以*添加代码注释...).如果带注释的方法不是*真的*覆盖基类中的方法,它将无法编译.这是一项安全检查.添加"id函数"作为装饰器不会提供这样的安全检查.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有