1
0

classex.py 870 B

123456789101112131415161718192021222324252627
  1. # -*- coding: utf-8 -*-
  2. class AttributeDescriptor(object):
  3. def __init__(self, name, types=None, min=None):
  4. self._name = name
  5. self._types = types
  6. self._min = min
  7. def __get__(self, instance, owner):
  8. return getattr(instance, self._name)
  9. def __set__(self, instance, value):
  10. if self._types and not any([isinstance(value, t) for t in self._types]):
  11. raise TypeError('expected type ϵ {{{}}}, {} ({!r}) given'.format(
  12. ', '.join([t.__name__ for t in self._types]),
  13. type(value).__name__,
  14. value,
  15. ))
  16. elif self._min and not self._min <= value:
  17. raise ValueError('expected value >= {!r}, {!r} given'.format(
  18. self._min,
  19. value,
  20. ))
  21. else:
  22. setattr(instance, self._name, value)