Hello dB,
the functions with single underscore are internal and not intended to be invoked directly from your own code. In turn, the functions with two underscore are the right way to invoke the code.
Depending on the inheritance of the class, the double-underscore functions take care of runtime relevant evaluation of which version of the single-underscore function is called. Your example above is an a simple case without any inheritance relevant aspects to take in account so that the double-underscore function directly invokes the single-underscore. In other cases the double-underscore function contains more code to estimate the right code execution.
Please note, in our documentation we only show the usage of double-underscore version of functions. Consider the single-underscore functions as internal functions.
I hope it helps you further.
Best regards
Paul Banach