Skip to content

Commit 1b39b20

Browse files
Use repr() when an enum has a custom __repr__() (#11879)
Co-authored-by: Adam Turner <[email protected]>
1 parent 9c59a6e commit 1b39b20

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Features added
2121
Patch by Bénédikt Tran.
2222

2323
.. _`<search>`: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/search
24+
* #11803: autodoc: Use an overriden ``__repr__()`` function in an enum,
25+
if defined. Patch by Shengyu Zhang.
2426

2527
Bugs fixed
2628
----------

sphinx/util/inspect.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,8 @@ def object_description(obj: Any, *, _seen: frozenset = frozenset()) -> str:
387387
return 'frozenset({%s})' % ', '.join(object_description(x, _seen=seen)
388388
for x in sorted_values)
389389
elif isinstance(obj, enum.Enum):
390+
if obj.__repr__.__func__ is not enum.Enum.__repr__: # type: ignore[attr-defined]
391+
return repr(obj)
390392
return f'{obj.__class__.__name__}.{obj.name}'
391393
elif isinstance(obj, tuple):
392394
if id(obj) in seen:

tests/test_util_inspect.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,17 @@ class MyEnum(enum.Enum):
667667
assert inspect.object_description(MyEnum.FOO) == "MyEnum.FOO"
668668

669669

670+
def test_object_description_enum_custom_repr():
671+
class MyEnum(enum.Enum):
672+
FOO = 1
673+
BAR = 2
674+
675+
def __repr__(self):
676+
return self.name
677+
678+
assert inspect.object_description(MyEnum.FOO) == "FOO"
679+
680+
670681
def test_getslots():
671682
class Foo:
672683
pass

0 commit comments

Comments
 (0)