]> granicus.if.org Git - python/commitdiff
Issue 18693: Put custom __dir__ back in place. Will instead look at fixing `help()`.
authorEthan Furman <ethan@stoneleaf.us>
Mon, 12 Aug 2013 13:51:41 +0000 (06:51 -0700)
committerEthan Furman <ethan@stoneleaf.us>
Mon, 12 Aug 2013 13:51:41 +0000 (06:51 -0700)
Lib/enum.py
Lib/test/test_enum.py

index dc9701750c678a82843648f42de92ca56abb84f7..34eb7b87f65e6040f8b0517de5b6b580dea7cc3f 100644 (file)
@@ -223,6 +223,9 @@ class EnumMeta(type):
     def __contains__(cls, member):
         return isinstance(member, cls) and member.name in cls._member_map_
 
+    def __dir__(self):
+        return ['__class__', '__doc__', '__members__'] + self._member_names_
+
     @property
     def __members__(cls):
         """Returns a mapping of member name->value.
@@ -430,6 +433,9 @@ class Enum(metaclass=EnumMeta):
     def __str__(self):
         return "%s.%s" % (self.__class__.__name__, self._name_)
 
+    def __dir__(self):
+        return (['__class__', '__doc__', 'name', 'value'])
+
     def __eq__(self, other):
         if type(other) is self.__class__:
             return self is other
index 751fd56fd7fa576270b3f8057073310187d7a96d..71c77a0f00bfcf1eb3f073a7754c72cf7085f2c2 100644 (file)
@@ -67,6 +67,21 @@ class TestEnum(unittest.TestCase):
             WINTER = 4
         self.Season = Season
 
+    def test_dir_on_class(self):
+        Season = self.Season
+        self.assertEqual(
+            set(dir(Season)),
+            set(['__class__', '__doc__', '__members__',
+                'SPRING', 'SUMMER', 'AUTUMN', 'WINTER']),
+            )
+
+    def test_dir_on_item(self):
+        Season = self.Season
+        self.assertEqual(
+            set(dir(Season.WINTER)),
+            set(['__class__', '__doc__', 'name', 'value']),
+            )
+
     def test_enum_in_enum_out(self):
         Season = self.Season
         self.assertIs(Season(Season.WINTER), Season.WINTER)