Найти - Пользователи
Полная версия: Помогите с реализацией типа.
Начало » Python для экспертов » Помогите с реализацией типа.
1
don_pedro
Вообщем нужен тип перечисление. Но не так как в 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 первых класа в один, и наследоваться от него? Или гемор с параметрами конструктора и проверкой типов?
Мысли в студию.
JOHN_16
Не понял зачем вам определение типов, вы же его не задействуете нигде.
Такой вариант вам подойдет?
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)"
don_pedro
JOHN_16
Не понял зачем вам определение типов, вы же его не задействуете нигде.Такой вариант вам подойдет?
Переписал уже примерно также. Но да вы правы абсолютно не применимо. Паскалевская привычка, чтоли)))
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB