Форум сайта python.su
Вообщем нужен тип перечисление. Но не так как в 3.4.
Чобы не писать так х=обект.атрибут а так х=значение.
Вообщем, наколхозил так:
class enumerated_type_str(str):
def __init__(self, valve):
if not self.Variant: raise AttributeError('Переопределите атрибут Variant!')
if valve in self.Variant:
self.valve=valve
else: raise ValueError('Присваивание данного значения невозможно! Выберите одно из-', self.Variant)
class enumerated_type_int(int):
def __init__(self, valve):
if not self.Variant: raise AttributeError('Переопределите атрибут Variant!')
if valve in self.Variant:
self.valve=valve
else: raise ValueError('Присваивание данного значения невозможно! Выберите одно из-', self.Variant)
class seasone(enumerated_type_str):
Variant=('Winter', 'Spring', 'Summer', 'Autumn')
class day_of_weak(enumerated_type_int):
Variant=tuple(range(1,8))
x=seasone('Winter')
y=seasone('Spring')
day_z=day_of_weak(7)
print(x, y, day_z)
Отредактировано don_pedro (Июль 7, 2016 15:43:32)
Офлайн
Не понял зачем вам определение типов, вы же его не задействуете нигде.
Такой вариант вам подойдет?
class MyEnum: def __init__(self, *args): self._values = args def __call__(self, value): if value in self._values: return value else: raise ValueError('Присваивание данного значения невозможно! Выберите одно из "{}"'.format(self._values))
john_16@Linux-home /tmp $ tail -n 14 myenum.py m = MyEnum('Winter', 'Spring', 'Summer', 'Autumn') print(m('Winter')) print(m('Summer')) try: print(m('Hell')) except ValueError as e: print(e) m = MyEnum(*list(range(7))) print(m(1)) print(m(2)) print(m(10)) john_16@Linux-home /tmp $ python3 myenum.py Winter Summer Присваивание данного значения невозможно! Выберите одно из "('Winter', 'Spring', 'Summer', 'Autumn')" 1 2 Traceback (most recent call last): File "myenum.py", line 22, in <module> print(m(10)) File "myenum.py", line 8, in __call__ raise ValueError('Присваивание данного значения невозможно! Выберите одно из "{}"'.format(self._values)) ValueError: Присваивание данного значения невозможно! Выберите одно из "(0, 1, 2, 3, 4, 5, 6)"
Офлайн
JOHN_16Переписал уже примерно также. Но да вы правы абсолютно не применимо. Паскалевская привычка, чтоли)))
Не понял зачем вам определение типов, вы же его не задействуете нигде.Такой вариант вам подойдет?
Отредактировано don_pedro (Июль 10, 2016 19:29:13)
Офлайн