Le cas de StrEnum dans Python 3.11
Dec 21 2022
Avec la mise à jour de Python 3.11, nous avons rencontré un changement subtil dans le comportement d'Enum.
Avec la mise à jour de Python 3.11, nous avons rencontré un changement subtil dans le comportement d'Enum. C'est grâce à la PEP 663 — Standardisation des comportements Enum str(), repr() et format() .
Avant Python 3.11
Avant Python 3.11, une énumération de chaîne, comme illustré ci-dessous, renvoyait la valeur d'une entrée dans l'énumération lorsqu'elle était utilisée via format ou une chaîne f, mais pas lors d'un appel implicite __str__().
# Python 3.10
from enum import Enum
class Foo(str, Enum):
BAR = "bar"
x = Foo.BAR
x # Outputs <Foo.BAR: 'bar'>
f"{x}" # Outputs 'bar'
"{}".format(x) # Outputs 'bar'
str(x) # Outputs 'Foo.BAR'
x.value # Outputs 'bar'Python 3.11
# Python 3.11
from enum import Enum
class Foo(str, Enum):
BAR = "bar"
x = Foo.BAR
x # Outputs <Foo.BAR: 'bar'>
f"{x}" # Outputs 'Foo.BAR'
"{}".format(x) # Outputs 'Foo.BAR'
str(x) # Outputs 'Foo.BAR'
x.value # Outputs 'bar'
Dans Python 3.11, StrEnum a été ajouté à la bibliothèque standard. L'utiliser au lieu du style d'énumération susmentionné rend le comportement plus évident.
# Python 3.11
from enum import StrEnum, auto
class Foo(StrEnum):
BAR = auto()
x = Foo.BAR
x # Outputs <Foo.BAR: 'bar'>
f"{x}" # Outputs 'bar'
"{}".format(x) # Outputs 'bar'
str(x) # Outputs 'bar'
x.value # Outputs 'bar'
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































