diff --git a/Lib/enum.py b/Lib/enum.py index 9d1aef372c12fc2..babe22f4ef8d2fe 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -164,6 +164,11 @@ def __new__(metacls, cls, bases, classdict): enum_class._member_names_ = [] # names in definition order enum_class._member_map_ = {} # name->value map enum_class._member_type_ = member_type + enum_class._module_qualname_ = ( + '%s.%s' % ( + enum_class.__module__, + enum_class.__qualname__.replace('..','.'), + )) # save attributes from super classes so we know if we can take # the shortcut of storing members in the class dict @@ -357,7 +362,7 @@ def __members__(cls): return MappingProxyType(cls._member_map_) def __repr__(cls): - return "" % cls.__name__ + return "" % cls._module_qualname_ def __reversed__(cls): return (cls._member_map_[name] for name in reversed(cls._member_names_)) @@ -425,6 +430,7 @@ def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, s enum_class.__module__ = module if qualname is not None: enum_class.__qualname__ = qualname + enum_class._module_qualname_ = '%s.%s' % (module, qualname.replace('.locals.','.')) return enum_class @@ -560,8 +566,7 @@ def _missing_(cls, value): raise ValueError("%r is not a valid %s" % (value, cls.__name__)) def __repr__(self): - return "<%s.%s: %r>" % ( - self.__class__.__name__, self._name_, self._value_) + return "<%s.%s: %r>" % (self.__class__._module_qualname_, self._name_, self._value_) def __str__(self): return "%s.%s" % (self.__class__.__name__, self._name_) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 68483e654254968..f4acc6b74146563 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -2584,9 +2584,9 @@ class Color(Enum): def test_pydoc(self): # indirectly test __objclass__ if StrEnum.__doc__ is None: - expected_text = expected_help_output_without_docs % __name__ + expected_text = expected_help_output_without_docs % self.__class__.__qualname__ else: - expected_text = expected_help_output_with_docs % __name__ + expected_text = expected_help_output_with_docs % self.__class__.__qualname__ output = StringIO() helper = pydoc.Helper(output=output) helper(self.Color) diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 06f872999515fba..2ea1738ac504763 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -453,7 +453,8 @@ class BinaryInteger(enum.IntEnum): zero = 0 one = 1 doc = pydoc.render_doc(BinaryInteger) - self.assertIn('', doc) + # __qualname__ usage means more to check + self.assertIn('