【发布时间】:2008-11-26 15:08:29
【问题描述】:
我知道 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()?
【问题讨论】:
-
你为什么想要这样的东西?您是否害怕有人会覆盖它并且它对他们不起作用?这是他们的问题。但有时,他们知道自己在做什么,他们只需要这样做。我花了三天时间解决 Java 中的这种限制,在 Python 中是 20 秒。
-
@pupeno 干净的编码可能需要不应该被意外覆盖破坏的不变量。此外,您的论点仅在您无法访问超类代码的情况下才成立(例如在第 3 方库中)。更冗长:考虑一个具有多个开发人员的复杂 Python 项目,并且您是一个类的设计者/代码所有者,该类依赖于您的函数实现确保的某些不变量。您希望避免在惰性子类实现中破坏不变量。如果有人需要更改,他可以在超类代码中进行更改或发起设计讨论。
标签: python