Если вы действительно хотите реализовать что-то похожее на ваше ожидаемое поведение, вы можете использовать шаблон получения / установки:
class Clock(object):
def __init__(self, time):
self._time = time
@property
def time(self):
print(self._time)
@time.setter
def time(self, value):
raise AttributeError("Clock time does not support re-assignment")
Использование:
>>> c = Clock("5:30")
>>> c.time
5:30
>>> c.time = "10:30"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in time
AttributeError: Clock time does not support re-assignment
Вы также можете просто pass
вместо того, чтобы вызывать исключение, но это потенциально могло бы сработать для некоторых, поскольку код «молча терпит неудачу», когда они в противном случае ожидали, что атрибут будет изменен.
Тем не менее: на ответ @ IvanVelichko, базовый атрибут _time
все еще может быть переназначен, если пользователь хочет go изо всех сил делать это:
>>> c._time = "10:30"
>>> c.time
10:30
В более широком смысле, шаблон получателя / установщика используется гораздо реже в Python, чем что-то вроде Java по указанной выше причине.