Поскольку вы говорите о сценарии использования OO, я думаю, вы должны знать об изменениях доступа, которые вы можете сделать, чтобы защитить атрибут для его значения и типа.
Подумайте об этом
class SomeClass(object):
def __init__(self, arg1):
self.__attr_now = arg1
self.__attr_later = None
@property
def attr_later(self):
return self.__attr_later
def compute(self):
# do some lengthy computation ...
self.__attr_later = x # some result
# continue work ...
Переменные экземпляра могут иметь префикс __
, чтобы сделать его закрытым для этого экземпляра. Таким образом, вы уверены, что переменная не может быть изменена извне. Более того, создайте property
для переменной, чтобы вы могли получить доступ к значению извне.
Если вы думаете, что вы хотите установить значение извне, определите setter
и управляйте входящим назначением - что-то вроде
@attr_later.setter
def attr_later(self, attr_val):
if isinstance(attr_val,str):
self.__attr_later = attr_val
else:
raise
# or do damage control
Вы управляете своим экземпляром, если вы правильно инкапсулируете свойства. Надеюсь, что это имеет смысл