Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ChoiceField(object): #
- choices = ['offline','hidden','online','mage','assasin','knight','warrior']
- val = ''
- def __init__(self, val, choices):
- self.choices = choices
- self.val = val
- def __get__(self, instance, owner):
- return self.val
- '''__get__(self, instance, instance_class)
- Определяет поведение при возвращении значения из дескриптора. instance это объект,
- для чьего атрибута-дескриптора вызывается метод. owner это тип (класс) объекта.
- '''
- def __set__(self, instance, val):
- '''__set__(self, instance, value)
- Определяет поведение при изменении значения из дескриптора.
- instance это объект, для чьего атрибута-дескриптора вызывается метод.
- value это значение для установки в дескриптор. '''
- if val in self.choices:
- self.val = val
- else:
- raise ValueError('Invalid value(profa or status)')
- class Hero(object):
- profa = ChoiceField('profa', ....) #descriptor
- character_status = ChoiceField('character_status', ....') #descriptor
- # Класс содержит атрибуты и принимает параметры:
- # choices - список элементов, которые можно выбрать.
- # value - текущее значение
- # В классе _ _ init _ _ должна получить список choices и value и запихнуть их в атрибуты класса.
- # Дальше нам нам нужно определить в нем специальные методы _ _set_ _, _ _get_ _.
- # Они делают возможным использовать экземпляр класса как простую переменную по типу строки или интеджер
- # . Почитайте о них подробнее в интернете. Плюс почитайте о Дескрипторах. По сути мы реализуем его.
- # _ _get_ _ - должен просто отдать текущее значение
- # _ _set_ _ - должен проверить есть ли новое значение в списке. Если есть - присвоить, если нет - вызвать ошибку.
- # Дальше наша задача улучшить работу с классом нашего героя.
- # У нас есть повторяющийся код, это методы validate_status, validate_profa.
- # Они проверяют, что значение находится в списке.
- # Наша задача убрать этим методы из класса. Вместо них создать 2 атрибута, которые являются экземплярами класса ChoiceField,
- # передать в них соответствующие списки атрибутов, которые вы уже создавали в прошлой задаче.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement