如何防止Python中函数被重写
有没有办法让一个类里的函数不能被重写?就像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__
来绕过这个限制。