| 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.storage_name = None | | self.storage_name = None |
| | | |
| def __set_name__(self, owner, name): | | def __set_name__(self, owner, name): |
| self.storage_name = f'_{name}' | | self.storage_name = f'_{name}' |
| | | |
| 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 getattr(instance, self.storage_name, self.initial_value) | | return getattr(instance, self.storage_name, self.initial_value) |
| | | |
| def __set__(self, instance, value): | | def __set__(self, instance, value): |
| setattr(instance, self.storage_name, value) | | setattr(instance, self.storage_name, value) |
| | | |
| def __delete__(self, instance): | | def __delete__(self, instance): |
| if hasattr(instance, self.storage_name): | | if hasattr(instance, self.storage_name): |
| delattr(instance, self.storage_name) | | delattr(instance, self.storage_name) |
| else: | | else: |
| raise KeyError(self.storage_name) | | raise KeyError(self.storage_name) |