freezable.py 422 B

12345678910111213141516
  1. # Slight performance hit when setting an attribute.
  2. # Read operations unchanged.
  3. class Freezable:
  4. __slots__ = ["_Freezable__frozen"]
  5. def __init__(self):
  6. super().__setattr__("_Freezable__frozen", False)
  7. def freeze(self):
  8. super().__setattr__("_Freezable__frozen", True)
  9. def __setattr__(self, key, value):
  10. assert not self._Freezable__frozen
  11. super().__setattr__(key, value)