Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions 11 Lib/enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -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('.<locals>.','.'),
))

# save attributes from super classes so we know if we can take
# the shortcut of storing members in the class dict
Expand Down Expand Up @@ -357,7 +362,7 @@ def __members__(cls):
return MappingProxyType(cls._member_map_)

def __repr__(cls):
return "<enum %r>" % cls.__name__
return "<enum %r>" % cls._module_qualname_

def __reversed__(cls):
return (cls._member_map_[name] for name in reversed(cls._member_names_))
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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_)
Expand Down
4 changes: 2 additions & 2 deletions 4 Lib/test/test_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion 3 Lib/test/test_pydoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,8 @@ class BinaryInteger(enum.IntEnum):
zero = 0
one = 1
doc = pydoc.render_doc(BinaryInteger)
self.assertIn('<BinaryInteger.zero: 0>', doc)
# __qualname__ usage means more to check
self.assertIn('<test.test_pydoc.PydocDocTest.test_text_enum_memb', doc)

def test_mixed_case_module_names_are_lower_cased(self):
# issue16484
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.