Comparisons and sorting of a numeric class....

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Jan 24 00:01:09 EST 2015


Rustom Mody 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 :-) ]


It certainly is. But fortunately it is not necessary.

# Untested
class B4(IntEnum):
    F1 = 0
    F2 = 1
    F3 = 2
    T  = 3
    def __bool__(self):
        return self is B4.T
    def __str__(self):
        if self is B4.F1: return "Certainly False"
        if self is B4.F2: return "Maybe False"
        if self is B4.F3: return "Maybe True"
        if self is B4.T: return "Certainly True"



-- 
Steven




More information about the Python-list mailing list