In Python, direct attribute access is the norm. When you need to add validation or logic to getting/setting a value, you shouldn't switch to Java-style get_x()/set_x() methods, which would break client code. Instead, use properties and descriptors.
The @property Decorator
Use @property to define getters, setters, and deleters for an attribute while keeping the syntax obj.attr.