• fruitcantfly@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    1 day ago

    A single underscore is just a naming convention, but double underscores triggers automatic name-mangling of the variable in question:

    $ cat test.py
    class foo:
            def __init__(self, x):
                    self.__x = x
    
    f = foo(1)
    f.__x
    $ python3 test.py
    Traceback (most recent call last):
      File "/mnt/d/test.py", line 6, in <module>
        f.__x
    AttributeError: 'foo' object has no attribute '__x'
    

    However, much like private/protected variables in java, this is pretty trivial to circumvent if you want.

    But I don’t believe that you can argue that access modifiers are required for OO not to be shoehorned into a language, not when influential OO languages like Smalltalk didn’t have this feature either. Java just happens to be closer to C++, where public/private/protected is much more rigidly enforced than either Java or Python