I come from the Java world, where you can hide variables and functions and then run unit tests against them using reflection. I have used nested functions to hide implementation details of my classes so that only the public API is visible. I am trying to write unit tests against these nested functions to make sure that I don’t break them as I develop. I have tried calling one of the nested functions like:
def outer(): def inner(): pass outer.inner()
which results in the error message:
AttributeError: ‘function’ object has no attribute ‘inner’
Is there a way for me to write unit tests against these nested functions? If not, is there a way to trigger the name munging for function names like you can for class variables by prefixing them with __?
Advertisement
Answer
The Python convention is to name “private” functions and methods with a leading underscore. When you see a leading underscore, you know not to try and use it.
Remember, Python is not Java.