如何防止在python中重写函数

时间:2010-03-11 14:24:33

标签: python override final

有没有办法让类功能不可重复?比如java的final关键字。即,任何重写类都不能覆盖该方法。

4 个答案:

答案 0 :(得分:89)

你可以在那里发表评论:

# We'll fire you if you override this method.

令人惊讶的是,像这样的低技术解决方案在实践中如何运作。

答案 1 :(得分:38)

问题是您正在尝试使用Java哲学编写Python。有些东西会延续,但不是全部。在Python中,您可以执行以下操作,它完全没问题,但完全违背了Java对对象的看法。

class Thing(object):
    x = 1
something = Thing()
something.y = something.x

如果你真的想要它,你可以尝试code posted here。但是你可以看到有很多代码可以让它做你想做的事情。还应该注意的是,即使是发布代码的人也说可以使用__dict__object.__setattr__传递。

答案 2 :(得分:0)

是的,不要这样做。

我应该在投票后加上这个。一些人认为这种保护机制违背了Python的精神,即“我们都同意成年人”。你想要保护这些功能吗?如果评论不够,为什么会有更强的“?”

我会记录您的期望并期望其他程序员采取负责任的行动。

答案 3 :(得分:0)

在类中的方法之前使用双下划线不仅是命名约定。这样,方法名称就被classname(_classname__methodname())弄乱了。

通过使用前面带有双下划线的方法来继承一个类;对于子类而言,很难覆盖上面指定的方法。 这种做法几乎等同于java中的final。