| t | class ParDescr: | t | class ParDescr: |
| | | |
| def __init__(self, initial_value): | | def __init__(self, initial_value): |
| self.initial_value = initial_value | | self.initial_value = initial_value |
| self.values = {} | | self.values = {} |
| self.already_deleted = set() | | self.already_deleted = set() |
| | | |
| def __get__(self, instance, owner): | | def __get__(self, instance, owner): |
| if instance is None: | | if instance is None: |
| return self.initial_value | | return self.initial_value |
| return self.values.get(id(instance), self.initial_value) | | return self.values.get(id(instance), self.initial_value) |
| | | |
| def __set__(self, instance, value): | | def __set__(self, instance, value): |
| instance_id = id(instance) | | instance_id = id(instance) |
| self.values[instance_id] = value | | self.values[instance_id] = value |
| if instance_id in self.already_deleted: | | if instance_id in self.already_deleted: |
| self.already_deleted.remove(instance_id) | | self.already_deleted.remove(instance_id) |
| | | |
| def __delete__(self, instance): | | def __delete__(self, instance): |
| instance_id = id(instance) | | instance_id = id(instance) |
| if instance_id in self.already_deleted: | | if instance_id in self.already_deleted: |
| raise KeyError | | raise KeyError |
| elif instance_id in self.values: | | elif instance_id in self.values: |
| del self.values[instance_id] | | del self.values[instance_id] |
| self.already_deleted.add(instance_id) | | self.already_deleted.add(instance_id) |
| else: | | else: |
| self.already_deleted.add(instance_id) | | self.already_deleted.add(instance_id) |