From afde363e70c626697e04e141359413caff0d708e Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Tue, 24 Jan 2023 20:26:06 -0500 Subject: [PATCH] Expand enum documentation to include additional limitations when shadowing a built-in --- Doc/library/enum.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index cfe4fbeb0698e7..3ae7611f3445f6 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -925,3 +925,23 @@ Notes >>> from enum import IntEnum >>> class MyIntEnum(IntEnum): ... __str__ = IntEnum.__str__ + + Additionally, it's possible to end up shadowing a method or property from + a derived baseclass such as :meth:`str.title` or :attr:`~numbers.Rational.numerator`, + which can cause unexpected issues at runtime. + + Consider the following examples:: + + >>> from enum import StrEnum + >>> class MyStrEnum(StrEnum): + ... title = "RED" + >>> MyStrEnum.title.title() + Traceback (most recent call last): + ... + TypeError: 'MyStrEnum' object is not callable + + >>> from enum import IntEnum + >>> class MyIntEnum(IntEnum): + ... numerator = 42 + >>> MyIntEnum.numerator.numerator +