gpt4 book ai didi

python - 为什么 Python 中没有 @override 装饰器来帮助提高代码的可读性?

转载 作者:IT老高 更新时间:2023-10-28 21:12:54 27 4
gpt4 key购买 nike

我一直在 Python 中使用带有 ABCMeta 的抽象类。当你编写一个抽象方法时,你用装饰器 @abstractmethod 标记它。我发现奇怪的一件事(与其他语言不同)是,当子类覆盖父类(super class)方法时,没有提供像 @override 这样的装饰器。有谁知道这背后的逻辑可能是什么?

这使得阅读代码的人在快速确定哪些方法覆盖/实现抽象方法与仅存在于子类中的方法时会有些困惑。

最佳答案

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

如果你想添加 @override@override 装饰器实际上不能做任何覆盖检查。然后你有两个选择。要么 没有覆盖检查,在这种情况下 @override 并不比注释好,或者 type 构造函数需要专门了解 @override 并在类创建时检查它。像 @override 这样的便利功能真的不需要像那样使类型系统实现的核心部分复杂化。另外,如果你不小心把 @override 放在了一个非方法上,这个 bug 将不会被发现,直到你尝试调用修饰的函数并得到一个奇怪的 TypeError。

关于python - 为什么 Python 中没有 @override 装饰器来帮助提高代码的可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com