如何防止Python中函数被重写

45 投票
4 回答
23047 浏览
提问于 2025-04-15 20:18

有没有办法让一个类里的函数不能被重写?就像Java里的final关键字一样。也就是说,任何继承这个类的子类都不能改写这个方法。

4 个回答

3

在一个类的方法前面加上两个下划线(__)并不是仅仅为了命名好看。这样做会把方法的名字变得复杂,变成 classname(_classname__methodname()) 这种形式。

如果你继承了一个带有双下划线方法的类,那么子类就很难去重写这个方法了。

这种做法几乎和Java中的 final 关键字是一样的意思。

176

你可以在里面加一句评论,大意是:

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

让人惊讶的是,这种简单的解决方案在实际中效果竟然这么好。

46

问题在于,你在用Java的思维方式来写Python代码。虽然有些概念是可以通用的,但并不是所有的都适用。在Python中,你可以这样做,这完全没问题,但这和Java对对象的理解是相反的。

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

如果你真的想要这样做,可以试试这里发布的代码。不过你会发现,为了实现你想要的功能,代码量会非常大。而且,发布这个代码的人也提到过,可以通过使用__dict__或者object.__setattr__来绕过这个限制。

撰写回答