我知道 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/