class Status: valid = 1 invalid = 2 unknown = 3
On Fri, Jul 26, 2019, 3:37 PM Chris Angelico <ros...@gmail.com> wrote: > On Sat, Jul 27, 2019 at 5:16 AM Erik Aronesty <e...@q32.com> wrote: > > > > I just spend a while tracking down and killing all "if Enum" and "if not > > Enum" bugs in my code. I was frankly shocked that this didn't raise a > > ValueError to begin with. > > > > Apparently all enums are true/false depending on whether the underlying > > value is truthy or falsy. > > > > Which breaks the abstraction Enum's are trying to achieve because now the > > user of an Enum has to know "stuff" about the underlying value and how it > > behaves. > > If you want to abstract away the underlying value, just don't have one? > > >>> from enum import Enum, auto > >>> class Color(Enum): > ... red = auto() > ... green = auto() > ... blue = auto() > ... > >>> bool(Color.red) > True > >>> bool(Color.green) > True > >>> bool(Color.blue) > True > > They happen to have the values 1, 2, and 3, but that doesn't matter. > > When an enum has to correspond to a real underlying value, it behaves > as similarly to that value as possible: > > >>> http.HTTPStatus.METHOD_NOT_ALLOWED == 405 > True > > Thus it should also inherit its truthiness from that value. > > ChrisA > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list