As a minimal example, consider the following (in Python):
class Foo:
def __init__(self, bar):
# Assume bar is a valid at this point
self.bar = bar
def divide_by_bar(self, num):
return num / self.bar
If the attribute bar is public, my understanding is that it is valid for the client to do something like:
>>> foo = Foo(1)
>>> foo.bar = 0
>>> foo.divide_by_bar(2)
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
We encountered a more complex version of this in our team and I suggested to make the attribute private, or read-only (or to consider the handling the exception). However, I got the reply that, since it is only used in one place in our code base, it is fine to leave it like that. I agreed to that, but I have noticed numerous examples of this practice in our code base and I am uncertain when should one be more strict with these cases. Should I ignore it until it is used in multiple places?
bar
to be 0, then check for that when assigning to bar. If it is legal, then check for and handle the case of bar=0 in divide_by_bar().