开发者

How to prevent a function from being overridden in Python [duplicate]

开发者 https://www.devze.com 2022-12-22 20:05 出处:网络
This question already has answers here: 开发者_StackOverflow社区 Making functions non override-able
This question already has answers here: 开发者_StackOverflow社区 Making functions non override-able (6 answers) Closed 3 years ago.

Is there a way to make a class function unoverriddable? Something like Java's final keyword. I.e, any overriding class cannot override that method.


You could add a comment in there to the effect of:

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

It's surprising how well low-tech solutions like this work in practice.


The issue is you are trying to write in Python using Java philosophies. Some thing carry over, but not all of them. In Python you can do the following and it is perfectly fine, but it completely goes against how Java thinks of objects.

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

If you really want it, you can try the code posted here. But as you can see, there is a lot of code there to get it to do what you want. It also should be noted that even the person that posted the code says it can be bypassed using __dict__ or object.__setattr__.


Using a double underscore before a method in a class is not just a naming convention. By doing so, the method name is mangled with classname(_classname__methodname()).

By inheriting a class with a method having double underscores in front of it, it becomes difficult for the child class to override the above specified method.

This practice is almost equivalent to final in Java.


Yes, there is: Don't do it!

Such protection mechanisms are seen by some to go against the ethos of Python, that, "We are all consenting adults here." From whom do you want to protect such functions? And, if a comment will not suffice, why would something 'stronger'?

I would document your expectations and expect other programmers to act responsibly.

0

精彩评论

暂无评论...
验证码 换一张
取 消