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.
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
You could put a comment in there to the effect of:
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 completely goes against how Java thinks of objects.
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 by passed using
__dict__
orobject.__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;for the child class it becomes difficult to override the above specified method. This practice is almost equivalent to final in java.
Yes there is, don't do it.
I should add to this after the down-vote. Such protection mechanisms are seen by some to go against the ethos of Python, that "we are all consenting adults here".Who do you want to protect such functions from? And if a comment will not suffice why would something 'stronger'?
I would document your expectations and expect other programmers to act responsibly.