cpython: 8e9d3a5d47d5 (original) (raw)
Mercurial > cpython
changeset 103033:8e9d3a5d47d5
issue23591: more docs; slight change to repr [#23591]
Ethan Furman ethan@stoneleaf.us | |
---|---|
date | Sun, 04 Sep 2016 11:39:01 -0700 |
parents | 1bd1e31a3298 |
children | ffc915a55a72 |
files | Doc/library/enum.rst Lib/enum.py Lib/test/test_enum.py |
diffstat | 3 files changed, 23 insertions(+), 15 deletions(-)[+] [-] Doc/library/enum.rst 13 Lib/enum.py 13 Lib/test/test_enum.py 12 |
line wrap: on
line diff
--- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -574,7 +574,7 @@ It is also possible to name the combinat >>> Perm.RWX <Perm.RWX: 7> >>> ~Perm.RWX
Another important difference between :class:IntFlag
and :class:Enum
is that
if no flags are set (the value is 0), its boolean evaluation is :data:False
::
@@ -615,6 +615,17 @@ flags being set, the boolean evaluation
>>> bool(Color.red & Color.green)
False
+Individual flags should have values that are powers of two (1, 2, 4, 8, ...),
+while combinations of flags won't::
+
+ Giving a name to the "no flags set" condition does not change its boolean value::
--- a/Lib/enum.py +++ b/Lib/enum.py @@ -692,14 +692,11 @@ class Flag(Enum): if self.name is not None: return '<%s.%s: %r>' % (cls.name, self.name, self.value) members = self.decompose()
if len(members) == 1 and members[0]._name_ is None:[](#l2.7)
return '<%s: %r>' % (cls.__name__, members[0]._value_)[](#l2.8)
else:[](#l2.9)
return '<%s.%s: %r>' % ([](#l2.10)
cls.__name__,[](#l2.11)
'|'.join([str(m._name_ or m._value_) for m in members]),[](#l2.12)
self._value_,[](#l2.13)
)[](#l2.14)
return '<%s.%s: %r>' % ([](#l2.15)
cls.__name__,[](#l2.16)
'|'.join([str(m._name_ or m._value_) for m in members]),[](#l2.17)
self._value_,[](#l2.18)
)[](#l2.19)
def str(self): cls = self.class
--- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1688,12 +1688,12 @@ class TestFlag(unittest.TestCase): self.assertEqual(repr(Perm.X), '<Perm.X: 1>') self.assertEqual(repr(Perm.R | Perm.W), '<Perm.R|W: 6>') self.assertEqual(repr(Perm.R | Perm.W | Perm.X), '<Perm.R|W|X: 7>')
self.assertEqual(repr(Perm(0)), '<Perm: 0>')[](#l3.7)
self.assertEqual(repr(Perm(0)), '<Perm.0: 0>')[](#l3.8) self.assertEqual(repr(~Perm.R), '<Perm.W|X: 3>')[](#l3.9) self.assertEqual(repr(~Perm.W), '<Perm.R|X: 5>')[](#l3.10) self.assertEqual(repr(~Perm.X), '<Perm.R|W: 6>')[](#l3.11) self.assertEqual(repr(~(Perm.R | Perm.W)), '<Perm.X: 1>')[](#l3.12)
self.assertEqual(repr(~(Perm.R | Perm.W | Perm.X)), '<Perm: 0>')[](#l3.13)
self.assertEqual(repr(~(Perm.R | Perm.W | Perm.X)), '<Perm.0: 0>')[](#l3.14) self.assertEqual(repr(Perm(~0)), '<Perm.R|W|X: 7>')[](#l3.15)
Open = self.Open @@ -1933,13 +1933,13 @@ class TestIntFlag(unittest.TestCase): self.assertEqual(repr(Perm.R | Perm.W), '<Perm.R|W: 6>') self.assertEqual(repr(Perm.R | Perm.W | Perm.X), '<Perm.R|W|X: 7>') self.assertEqual(repr(Perm.R | 8), '<Perm.8|R: 12>')
self.assertEqual(repr(Perm(0)), '<Perm: 0>')[](#l3.22)
self.assertEqual(repr(Perm(8)), '<Perm: 8>')[](#l3.23)
self.assertEqual(repr(Perm(0)), '<Perm.0: 0>')[](#l3.24)
self.assertEqual(repr(Perm(8)), '<Perm.8: 8>')[](#l3.25) self.assertEqual(repr(~Perm.R), '<Perm.W|X|-8: -5>')[](#l3.26) self.assertEqual(repr(~Perm.W), '<Perm.R|X|-8: -3>')[](#l3.27) self.assertEqual(repr(~Perm.X), '<Perm.R|W|-8: -2>')[](#l3.28) self.assertEqual(repr(~(Perm.R | Perm.W)), '<Perm.X|-8: -7>')[](#l3.29)
self.assertEqual(repr(~(Perm.R | Perm.W | Perm.X)), '<Perm: -8>')[](#l3.30)
self.assertEqual(repr(~(Perm.R | Perm.W | Perm.X)), '<Perm.-8: -8>')[](#l3.31) self.assertEqual(repr(~(Perm.R | 8)), '<Perm.W|X|-16: -13>')[](#l3.32) self.assertEqual(repr(Perm(~0)), '<Perm.R|W|X|-8: -1>')[](#l3.33) self.assertEqual(repr(Perm(~8)), '<Perm.R|W|X|-16: -9>')[](#l3.34)
@@ -1950,7 +1950,7 @@ class TestIntFlag(unittest.TestCase): self.assertEqual(repr(Open.AC), '<Open.AC: 3>') self.assertEqual(repr(Open.RO | Open.CE), '<Open.CE: 524288>') self.assertEqual(repr(Open.WO | Open.CE), '<Open.CE|WO: 524289>')
self.assertEqual(repr(Open(4)), '<Open: 4>')[](#l3.39)
self.assertEqual(repr(Open(4)), '<Open.4: 4>')[](#l3.40) self.assertEqual(repr(~Open.RO), '<Open.CE|AC|-524292: -1>')[](#l3.41) self.assertEqual(repr(~Open.WO), '<Open.CE|RW|-524292: -2>')[](#l3.42) self.assertEqual(repr(~Open.AC), '<Open.CE|-524292: -4>')[](#l3.43)