[Python] аналог перечислений
От: alzt  
Дата: 08.04.08 08:57
Оценка:
Привет всем.

Какая конструкция языка Python более всего подходит для замены перечислений?
Т.е. хотелось бы, что-то вроде
enum Colors {cRed, cBlue, cGreen};
enum Shapes {sRound, sLine};

чтобы Colors и Shapes были разными типами.

Есть ли какие варианты лучше следующего
(Red, Blue, Green) = range(3)

?
Re: [Python] аналог перечислений
От: _nn_ www.nemerleweb.com
Дата: 08.04.08 10:13
Оценка: 6 (2)
Здравствуйте, alzt, Вы писали:

A>Привет всем.


A>Какая конструкция языка Python более всего подходит для замены перечислений?

A>Т.е. хотелось бы, что-то вроде
A>
A>enum Colors {cRed, cBlue, cGreen};
A>enum Shapes {sRound, sLine};
A>

A>чтобы Colors и Shapes были разными типами.

A>Есть ли какие варианты лучше следующего

A>
A>(Red, Blue, Green) = range(3)
A>

A>?

Поиск гугла не помог ?
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/413486
Days = Enum('Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su')


http://mail.python.org/pipermail/python-list/2000-June/040670.html
color = enum('red', 'yellow', 'green', 'blue')


http://mail.python.org/pipermail/python-list/2003-September/224342.html
  from enum import enum
  class LoanTypeCode(enum): 
    """
        enum LOAN_TYPE_CODE {
            UNKNOWN = 0,
            CONSTRUCTION,
            FHA,
            VHA,
            LIVESTOCK = 100,
            MACHINERY_EQUIPMENT,
            FARM_REAL_ESTATE,
            CROPS_PROCEEDS_NEW,
            CROPS_PROCEEDS_OLD,
            DAIRY_PROCEEDS,
        };
    """
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [Python] аналог перечислений
От: Tonal- Россия www.promsoft.ru
Дата: 08.04.08 14:18
Оценка:
Здравствуйте, alzt, Вы писали:
A>Т.е. хотелось бы, что-то вроде
A>
A>enum Colors {cRed, cBlue, cGreen};
A>enum Shapes {sRound, sLine};
A>

A>чтобы Colors и Shapes были разными типами.
А как ты собираешся использовать в python-е то, что типы разные?
Напямую проверять?
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
Re[2]: [Python] аналог перечислений
От: alzt  
Дата: 09.04.08 06:40
Оценка:
Здравствуйте, Tonal-, Вы писали:

A>>Т.е. хотелось бы, что-то вроде

A>>
A>>enum Colors {cRed, cBlue, cGreen};
A>>enum Shapes {sRound, sLine};
A>>

A>>чтобы Colors и Shapes были разными типами.
T>А как ты собираешся использовать в python-е то, что типы разные?
T>Напямую проверять?

Сейчас пытаюсь программировать на питоне, стиль мышления остался прежний.
Заметил, что сильно не хватает перечислений. Возможно в питоне они и не нужны — вместо них используются другие конструкции языка.

Насчёт разных типов — не хотелось бы, чтобы переменной типа Colors можно было присвоить значение sLine.
Сами перечисления мне не столь важны — подойдёт любая другая конструкция с подобной функциональностью (т.е. определять некоторый тип объекта).
Re: [Python] аналог перечислений
От: GonzoVas Россия  
Дата: 09.04.08 11:00
Оценка:
Здравствуйте, alzt, Вы писали:

A>Есть ли какие варианты лучше следующего

A>
A>(Red, Blue, Green) = range(3)
A>

A>?

На pypi есть два варианта enum'ов.
Re: [Python] аналог перечислений
От: MasterZiv СССР  
Дата: 09.04.08 12:19
Оценка:
alzt пишет:
> Какая конструкция языка Python более всего подходит для замены перечислений?
> Т.е. хотелось бы, что-то вроде
>
> enum Colors {cRed, cBlue, cGreen};
> enum Shapes {sRound, sLine};

Да просто два списка атомов.
Но чтобы они были бы разными типами — этого вряд ли можно добиться.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: [Python] аналог перечислений
От: Tonal- Россия www.promsoft.ru
Дата: 09.04.08 14:25
Оценка: +1
Здравствуйте, alzt, Вы писали:
A>Сейчас пытаюсь программировать на питоне, стиль мышления остался прежний.
Меняй столь мышления.

A>Насчёт разных типов — не хотелось бы, чтобы переменной типа Colors можно было присвоить значение sLine.

Этого в языке просто нет.
Можно вывернутся, и реализовать свойства с проверкой типов для членов класса...
Но обычной переменной всё равно в любое время можно присвоить любое значение.

A>Сами перечисления мне не столь важны — подойдёт любая другая конструкция с подобной функциональностью (т.е. определять некоторый тип объекта).

С именем в python-е тип не связывается.
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
Re[2]: [Python] аналог перечислений
От: alzt  
Дата: 10.04.08 10:28
Оценка:
Здравствуйте, GonzoVas, Вы писали:

A>>Есть ли какие варианты лучше следующего

A>>
A>>(Red, Blue, Green) = range(3)
A>>

A>>?

GV>На pypi есть два варианта enum'ов.


А что такое pypi?
Как уже посоветовали — надо менять стиль мышления\программирования. Видимо не зря перечисления не являются стандартным типом в Питоне.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.