I think this is a bit confusing. I had to re-read the article a few times just to make sure I hadn't missed something.
Python does not, in any way, provide public, private, and protected modifiers.
What this article describes are just variable names, intended to ask other programmers "Please, use these variables in a certain way." But another developer can, of course, completely ignore this request - because each of these variables functions, and is accessible, in exactly the same way - publicly.
This is intentional because, to quote Guido van Rossum, “programmers are consenting adults”.
More succinctly put, when you say, "However, this doesn’t fully perform the functionality of the protected modifier."
No, it doesn't perform a protected functionality in ANY way. It's just a name.
==============
As an aside, the examples may also be a bit confusing.
While you can certainly use variable names like "public_var1", "_protected_var2", and "__private_var3" the accepted convention is not to place the word "public, private, or protected" into the variable name. The only character with meaning in this light is the underscore ("_".)
If the variable has no preceding underscore in the variable name (like "var1") one is asking it to be treated as public.
If the variable has one preceding underscore in the variable name (like "_var1") one is asking it to be treated as private.
And, if the variable has two preceding underscores in the variable name (like "__var1") one is asking it to be treated as protected.