Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. class ChoiceField(object): #
  2. choices = ['offline','hidden','online','mage','assasin','knight','warrior']
  3. val = ''
  4. def __init__(self, val, choices):
  5. self.choices = choices
  6. self.val = val
  7.  
  8. def __get__(self, instance, owner):
  9. return self.val
  10. '''__get__(self, instance, instance_class)
  11. Определяет поведение при возвращении значения из дескриптора. instance это объект,
  12. для чьего атрибута-дескриптора вызывается метод. owner это тип (класс) объекта.
  13. '''
  14. def __set__(self, instance, val):
  15. '''__set__(self, instance, value)
  16. Определяет поведение при изменении значения из дескриптора.
  17. instance это объект, для чьего атрибута-дескриптора вызывается метод.
  18. value это значение для установки в дескриптор. '''
  19. if val in self.choices:
  20. self.val = val
  21. else:
  22. raise ValueError('Invalid value(profa or status)')
  23.  
  24.  
  25. class Hero(object):
  26.  
  27. profa = ChoiceField('profa', ....) #descriptor
  28. character_status = ChoiceField('character_status', ....') #descriptor
  29.  
  30. # Класс содержит атрибуты и принимает параметры:
  31. # choices - список элементов, которые можно выбрать.
  32. # value - текущее значение
  33.  
  34. # В классе _ _ init _ _ должна получить список choices и value и запихнуть их в атрибуты класса.
  35.  
  36. # Дальше нам нам нужно определить в нем специальные методы _ _set_ _, _ _get_ _.
  37. # Они делают возможным использовать экземпляр класса как простую переменную по типу строки или интеджер
  38. # . Почитайте о них подробнее в интернете. Плюс почитайте о Дескрипторах. По сути мы реализуем его.
  39. # _ _get_ _ - должен просто отдать текущее значение
  40. # _ _set_ _ - должен проверить есть ли новое значение в списке. Если есть - присвоить, если нет - вызвать ошибку.
  41.  
  42.  
  43. # Дальше наша задача улучшить работу с классом нашего героя.
  44. # У нас есть повторяющийся код, это методы validate_status, validate_profa.
  45. # Они проверяют, что значение находится в списке.
  46. # Наша задача убрать этим методы из класса. Вместо них создать 2 атрибута, которые являются экземплярами класса ChoiceField,
  47. # передать в них соответствующие списки атрибутов, которые вы уже создавали в прошлой задаче.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement