Comparisons and sorting of a numeric class....

Ian Kelly ian.g.kelly at gmail.com
Fri Jan 23 19:04:18 CET 2015


On Fri, Jan 23, 2015 at 10:03 AM, Rustom Mody <rustompmody at gmail.com> wrote:
> On Friday, January 23, 2015 at 10:22:06 PM UTC+5:30, Ian wrote:
>> On Fri, Jan 23, 2015 at 8:31 AM, Rustom Mody wrote:
>> > Can you tell me what of the following code does not satisfy your requirements?
>> > [Needs python 3.4]
>> >
>> >
>> >>>> from enum import IntEnum
>> >>>> class B4(IntEnum):
>> >         F1 = 0
>> >         F2 = 0
>> >         F3 = 0
>> >         T  = 1
>>
>> This strikes me as a potential problem:
>>
>> >>> B4.F1 is B4.F2 is B4.F3
>> True
>> >>> list(B4)
>> [<B4.F1: 0>, <B4.T: 1>]
>>
>> Enum members with the same values are just aliases for one another,
>> not distinct entities.
>
> Yeah....
>
> The only workaround I have been able to come up with is:
>
> class B4(IntEnum):
>>         F1 = 0
>>         F2 = ""
>>         F3 = None
>>         T  = 1
>
> which is not bad; its ridiculous
> [Like going around with a broken broom searching for falsey objects :-) ]

How about something like this:

>>> from enum import Enum
>>> class B4(Enum):
...     F1 = (False, 1)
...     F2 = (False, 2)
...     F3 = (False, 3)
...     T = (True, 4)
...     def __bool__(self):
...         return self.value[0]
...
>>> B4.F1 is B4.F2
False
>>> bool(B4.F1)
False
>>> bool(B4.T)
True



More information about the Python-list mailing list