Я бы рекомендовал использовать декоратор свойств для ограничения изменяемых атрибутов.
Например, рассмотрим:
class Book(object):
"""My book object is a wrapper for details"""
class Details(object):
"""My details object"""
def __init__(self):
self._details = Details()
@properties
def details(self):
return self._details
пытается запустить
book = Book()
book.details = new_details
вызовет AttributeError . Чтобы включить и выключить этот параметр с помощью редактируемого флага, вы можете добавить следующий оформленный метод:
@details.setter
def details(self, new_details):
if self._editable:
self._details = new_details
else:
raise AttributeError("Attribute cannot be set when Book is not editable.")
Что касается удаления, сборщик мусора в Python должен очищать старые переменные, если вы умны с помощью scope:)
Чтобы узнать больше о свойствах и установщиках, проверьте это . Если вы планируете сделать «книгу» неизменной после определенного момента, я бы порекомендовал изучить шаблон фабричного дизайна (где вы могли бы программно создать класс книги перед его раскрытием), а не включать и выключать флаг.