Вы можете обернуть ваши глобальные переменные в объект и переопределить метод объекта .__ setattr__. Затем вы можете запретить установку атрибутов, которые уже установлены. Однако это не касается сложных объектов, которые передаются по ссылке. Вам нужно будет делать мелкие / глубокие копии этих объектов, чтобы быть абсолютно уверенными, что они не могут быть изменены. Если вы используете новые классы стилей, вы можете переопределить объект .__ getattribute __ (self, name), чтобы сделать копии.
class State(object):
def __init__(self):
pass
def __setattr__(self, name, value):
if name not in self.__dict__:
self.__dict__[name] = value
** Я обычно не очень переживаю, если кто-то очень постарается взломать мой код. Я считаю, что переопределения __setattr__ достаточно (особенно, если вы выкидываете исключение), чтобы предупредить любого, кто играет с кодом, что целью для штата является только чтение. Если кто-то все еще чувствует необходимость изменить состояние, то с любым неопределенным поведением, с которым он сталкивается, я не виноват.