On Friday, January 23, 2015 at 11:35:49 PM UTC+5:30, Ian wrote:
> On Fri, Jan 23, 2015 at 10:03 AM, 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 :-) ]
> 
> 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

Simpler (though less general)

class B4(Enum):
        F1 = 1
        F2 = 2
        F3 = 3
        T  = 4
        def __bool__(self): return self.value == 4
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to