[Python-checkins] cpython (3.4): Issue22506: added methods on base Enum class now show up in dir of Enum

ethan.furman python-checkins at python.org
Tue Oct 14 17:59:40 CEST 2014


https://hg.python.org/cpython/rev/cd2ede7f2ff5
changeset:   93050:cd2ede7f2ff5
branch:      3.4
parent:      93048:d894aa49d5e4
user:        Ethan Furman <ethan at stoneleaf.us>
date:        Tue Oct 14 08:58:32 2014 -0700
summary:
  Issue22506: added methods on base Enum class now show up in dir of Enum subclass (3.4)

files:
  Lib/enum.py           |   7 ++++++-
  Lib/test/test_enum.py |  12 ++++++++++++
  2 files changed, 18 insertions(+), 1 deletions(-)


diff --git a/Lib/enum.py b/Lib/enum.py
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -464,7 +464,12 @@
         return "%s.%s" % (self.__class__.__name__, self._name_)
 
     def __dir__(self):
-        added_behavior = [m for m in self.__class__.__dict__ if m[0] != '_']
+        added_behavior = [
+                m
+                for cls in self.__class__.mro()
+                for m in cls.__dict__
+                if m[0] != '_'
+                ]
         return (['__class__', '__doc__', '__module__', 'name', 'value'] +
                 added_behavior)
 
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -176,6 +176,18 @@
                 set(['__class__', '__doc__', '__module__', 'name', 'value', 'wowser']),
                 )
 
+    def test_dir_on_sub_with_behavior_on_super(self):
+        # see issue22506
+        class SuperEnum(Enum):
+            def invisible(self):
+                return "did you see me?"
+        class SubEnum(SuperEnum):
+            sample = 5
+        self.assertEqual(
+                set(dir(SubEnum.sample)),
+                set(['__class__', '__doc__', '__module__', 'name', 'value', 'invisible']),
+                )
+
     def test_enum_in_enum_out(self):
         Season = self.Season
         self.assertIs(Season(Season.WINTER), Season.WINTER)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list