• 0 Posts
  • 4 Comments
Joined 2 years ago
cake
Cake day: July 1st, 2023

help-circle
  • 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



  • Unix shell scripts are one of the few holdouts.

    I don’t know if this applies to other shells, but bash will not only execute your script line-by-line, it will also read it line-by-line. Which means that you can modify the behavior of a running script by editing lines that have not yet been executed*. It’s absolutely bonkers, and I’m sure that it has caused more than one system failure, during upgrades.

    * For example, if you run the following script

    echo "hello"
    sleep 5
    echo "goodbye"
    

    and then edit the third line before the 5 second sleep has elapsed, then the modified line will be executed.