Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # encoding: utf-8
- from __future__ import print_function
- class ImmutabilityException(BaseException):
- pass
- class ImmutableRecord(object):
- def __init__(self, **kwargs):
- self._record = kwargs
- for name, value in kwargs.items():
- setattr(self, name, value)
- self._immutable = True
- def __setattr__(self, name, value):
- if hasattr(self, '_immutable') and self._immutable:
- raise ImmutabilityException('Unable to modify {name} in immutable record object'.format(name=name))
- return super(ImmutableRecord, self).__setattr__(name, value)
- def set(self, **kwargs):
- new_record = dict(self._record)
- new_record.update(kwargs)
- return self.__class__(**new_record)
- class Person(ImmutableRecord):
- def __init__(self, name, sex):
- super(Person, self).__init__(name=name, sex=sex)
- def __str__(self):
- return '<Person name={name} sex={sex}>'.format(name=self.name, sex=self.sex)
- jack = Person(name='Jack', sex='m')
- print(jack) # <Person name=Jack sex=m>
- jill = jack.set(name='Jill')
- print(jack) # <Person name=Jack sex=m>
- print(jill) # <Person name=Jill sex=m>
Add Comment
Please, Sign In to add comment