Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2016 15:32:06

don_pedro
Зарегистрирован: 2016-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией типа.

Вообщем нужен тип перечисление. Но не так как в 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)
Можно ли обеденить 2 первых класа в один, и наследоваться от него? Или гемор с параметрами конструктора и проверкой типов?
Мысли в студию.

Отредактировано don_pedro (Июль 7, 2016 15:43:32)

Офлайн

#2 Июль 7, 2016 22:49:50

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите с реализацией типа.

Не понял зачем вам определение типов, вы же его не задействуете нигде.
Такой вариант вам подойдет?

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)"



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июль 10, 2016 19:20:38

don_pedro
Зарегистрирован: 2016-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с реализацией типа.

JOHN_16
Не понял зачем вам определение типов, вы же его не задействуете нигде.Такой вариант вам подойдет?
Переписал уже примерно также. Но да вы правы абсолютно не применимо. Паскалевская привычка, чтоли)))
Спасибо!

Отредактировано don_pedro (Июль 10, 2016 19:29:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version