Ich beschäftige mich mit verteiltem Rechnen, bei dem mehrere Maschinen unter der Annahme kommunizieren, dass sie alle identische Versionen verschiedener Klassen haben. Daher scheint es ein gutes Design zu sein, diese Klassen unveränderlich zu machen; nicht in dem Sinne, dass es einen Benutzer mit schlechten Absichten vereiteln muss, nur unveränderlich genug, dass es nie versehentlich geändert wird.
Wie würde ich vorgehen? Wie würde ich zum Beispiel eine Metaklasse implementieren, die die Klasse, die sie verwendet, nach ihrer Definition unveränderlich macht?
>>> class A(object):
... __metaclass__ = ImmutableMetaclass
>>> A.something = SomethingElse # Don't want this
>>> a = A()
>>> a.something = Whatever # obviously, this is still perfectly fine.
Alternative Methoden sind auch in Ordnung, wie z.B. ein Dekorator/Funktion, die eine Klasse annimmt und eine unveränderliche Klasse zurückgibt.