fork download
  1. class Property:
  2. """Дескриптор, реализующий основные возможности функции property."""
  3. def __init__(self, fget=None, fset=None, fdel=None, doc=None):
  4. self.fget = fget # функция-геттер
  5. self.fset = fset # функция-сеттер
  6. self.fdel = fdel # функция-делетер
  7. self.__doc__ = doc # описание свойства
  8.  
  9. def __get__(self, client_obj, client_cls=None):
  10. """Геттер на основе заданной функции."""
  11. # При вызове атрибута из класса возвращает объект дескриптора
  12. if client_obj is None:
  13. return self
  14. # При отсутствии функции-геттера вызывается исключение
  15. if self.fget is None:
  16. raise AttributeError("Невозможно получить значение")
  17. # Возвращение результата работы функции-геттера
  18. return self.fget(client_obj)
  19.  
  20. def __set__(self, client_obj, value):
  21. """Сеттер на основе заданной функции."""
  22. # При отсутствии функции-сеттера вызывается исключение
  23. if self.fset is None:
  24. raise AttributeError("Невозможно присвоить значение")
  25. # Запуск работы функции-сеттера
  26. self.fset(client_obj, value)
  27.  
  28. def __delete__(self, client_obj):
  29. """Делетер на основе заданной функции."""
  30. # При отсутствии функции-делетера вызывается исключение
  31. if self.fdel is None:
  32. raise AttributeError("Невозможно удалить атрибут")
  33. # Запуск функции-делетера
  34. self.fdel(client_obj)# your code goes here
Success #stdin #stdout 0.04s 9360KB
stdin
Standard input is empty
stdout
Standard output is empty