Commit ccf44b04 authored by Ethan Furman's avatar Ethan Furman

branch merge

parents 63b85052 60255b67
...@@ -257,7 +257,7 @@ members are not integers (but see `IntEnum`_ below):: ...@@ -257,7 +257,7 @@ members are not integers (but see `IntEnum`_ below)::
>>> Color.red < Color.blue >>> Color.red < Color.blue
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'Color' and 'Color' TypeError: unorderable types: Color() < Color()
Equality comparisons are defined though:: Equality comparisons are defined though::
...@@ -747,6 +747,15 @@ besides the :class:`Enum` member you looking for:: ...@@ -747,6 +747,15 @@ besides the :class:`Enum` member you looking for::
.. versionchanged:: 3.5 .. versionchanged:: 3.5
Boolean evaluation: Enum classes that are mixed with non-Enum types (such as
:class:`int`, :class:`str`, etc.) are evaluated according to the mixed-in
type's rules; otherwise, all members evaluate as ``True``. To make your own
Enum's boolean evaluation depend on the member's value add the following to
your class::
def __bool__(self):
return bool(self._value_)
The :attr:`__members__` attribute is only available on the class. The :attr:`__members__` attribute is only available on the class.
If you give your :class:`Enum` subclass extra methods, like the `Planet`_ If you give your :class:`Enum` subclass extra methods, like the `Planet`_
......
...@@ -482,9 +482,6 @@ class Enum(metaclass=EnumMeta): ...@@ -482,9 +482,6 @@ class Enum(metaclass=EnumMeta):
def __str__(self): def __str__(self):
return "%s.%s" % (self.__class__.__name__, self._name_) return "%s.%s" % (self.__class__.__name__, self._name_)
def __bool__(self):
return bool(self._value_)
def __dir__(self): def __dir__(self):
added_behavior = [ added_behavior = [
m m
......
...@@ -272,11 +272,26 @@ class TestEnum(unittest.TestCase): ...@@ -272,11 +272,26 @@ class TestEnum(unittest.TestCase):
_any_name_ = 9 _any_name_ = 9
def test_bool(self): def test_bool(self):
# plain Enum members are always True
class Logic(Enum): class Logic(Enum):
true = True true = True
false = False false = False
self.assertTrue(Logic.true) self.assertTrue(Logic.true)
self.assertFalse(Logic.false) self.assertTrue(Logic.false)
# unless overridden
class RealLogic(Enum):
true = True
false = False
def __bool__(self):
return bool(self._value_)
self.assertTrue(RealLogic.true)
self.assertFalse(RealLogic.false)
# mixed Enums depend on mixed-in type
class IntLogic(int, Enum):
true = 1
false = 0
self.assertTrue(IntLogic.true)
self.assertFalse(IntLogic.false)
def test_contains(self): def test_contains(self):
Season = self.Season Season = self.Season
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment