python - 使功能不可覆盖

标签 python

我知道 python 函数默认是虚拟的。假设我有这个:

class Foo:
    def __init__(self, args):
        do some stuff
    def goo():
        print "You can overload me"
    def roo():
        print "You cannot overload me"

我不希望他们能够这样做:

class Aoo(Foo):
    def roo():
        print "I don't want you to be able to do this"

有没有办法防止用户重载 roo()?

最佳答案

Python 3.8(2019 年 10 月发布)为输入添加了 final 限定符。

final 限定符被添加到 typing 模块中——以 final 装饰器和 Final 类型注解的形式——用于三个相关目的:

  • 声明一个方法不应该被覆盖
  • 声明一个类不应该被子类化
  • 声明不应重新分配变量或属性
from typing import final

class Base:
    @final
    def foo(self) -> None:
        ...

class Derived(Base):
    def foo(self) -> None:  # Error: Cannot override final attribute "foo"
                            # (previously declared in base class "Base")
        ...

它符合您的要求,现在由核心 Python 支持。

看看PEP-591了解更多详情。

关于python - 使功能不可覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321024/

相关文章:

python - 安装并运行 Mac Python Open CV

python - 如何使用 PyQt5 将本地 html 文件转换为 pdf?

python - 为什么日志记录会陷入无限循环?

python3 datetime.datetime.strftime 无法接受 utf-8 字符串格式

python - mac 和 python 相对路径中的 Selenium chromedriver

python - 为什么继承 str 或 int 的行为与继承列表或字典的行为不同?

python - Instagram api 不返回数据

python - 键未知时访问字典值的简洁方法

python - 四舍五入 float 到最接近的第 10 位

python - 无法导入安装在 python 中的库