Я делаю некоторые распределенные вычисления, в которых несколько машин взаимодействуют, предполагая, что все они имеют идентичные версии различных классов. Таким образом, кажется хорошим дизайном сделать эти классы неизменяемыми; не в том смысле, что он должен мешать пользователю с плохими намерениями, просто достаточно неизменным, чтобы он никогда не был изменен случайно.
Как бы я поступил по этому поводу? Например, как мне реализовать метакласс, который делает класс, использующий его, неизменным после его определения?
>>> class A(object):
... __metaclass__ = ImmutableMetaclass
>>> A.something = SomethingElse # Don't want this
>>> a = A()
>>> a.something = Whatever # obviously, this is still perfectly fine.
Альтернативные методы также хороши, такие как декоратор / функция, которая принимает класс и возвращает неизменный класс.