123456789101112131415161718192021222324252627 |
- # -*- coding: utf-8 -*-
- class AttributeDescriptor(object):
- def __init__(self, name, types=None, min=None):
- self._name = name
- self._types = types
- self._min = min
- def __get__(self, instance, owner):
- return getattr(instance, self._name)
- def __set__(self, instance, value):
- if self._types and not any([isinstance(value, t) for t in self._types]):
- raise TypeError('expected type ϵ {{{}}}, {} ({!r}) given'.format(
- ', '.join([t.__name__ for t in self._types]),
- type(value).__name__,
- value,
- ))
- elif self._min and not self._min <= value:
- raise ValueError('expected value >= {!r}, {!r} given'.format(
- self._min,
- value,
- ))
- else:
- setattr(instance, self._name, value)
|