Issue 33862: doc Fix Enum members type (original) (raw)

Created on 2018-06-14 17:37 by adelfino, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 7694 closed adelfino,2018-06-14 17:57
Messages (4)
msg319532 - (view) Author: Andrés Delfino (adelfino) * (Python triager) Date: 2018-06-14 17:37
Documentation says __members__ attribute returns an "ordered dictionary" but it returns a mappingproxy instead. PR fixes this.
msg319536 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2018-06-14 18:16
Is not returning a mappingproxy an implementation detail? The important thing is that the result is a mapping of names to members, and that it is ordered.
msg319537 - (view) Author: Andrés Delfino (adelfino) * (Python triager) Date: 2018-06-14 18:48
I can't really say if it the return of __members__ is an implementation detail as there's no mention of that in the doc, but from reading the doc I think it's reasonable to think this is allowed: import enum class Colors(enum.Enum): RED = enum.auto() BLUE = enum.auto() Colors.__members__['GREEN'] = enum.auto() And the traceback: Traceback (most recent call last): File "<pyshell#8>", line 1, in Colors.__members__['GREEN'] = enum.auto() TypeError: 'mappingproxy' object does not support item assignment is somewhat confusing, as the documentation says an "ordered dictionary" is to be returned, and the traceback talks about a mapping proxy.
msg319542 - (view) Author: Ethan Furman (ethan.furman) * (Python committer) Date: 2018-06-14 19:55
Serhiy is correct. The exact return type only needs to be ordered, and have appropriate dictionary methods such as `keys()`, `values()`, and `items()`. The reason a mappingproxy was chosen is exactly because what you just tried is illegal and/or confusing: - illegal because an Enum cannot be modified that way - confusing because the dictionary returned is only a copy of the Enum class' __dict__, and successful attempts to modify it would not change the Enum class. It is an implementation detail because the exact type of dictionary returned could change in the future.
History
Date User Action Args
2022-04-11 14:59:01 admin set github: 78043
2018-06-14 19:55:45 ethan.furman set status: open -> closedmessages: + assignee: docs@python -> ethan.furmanresolution: not a bugstage: patch review -> resolved
2018-06-14 18:48:41 adelfino set messages: +
2018-06-14 18:16:47 serhiy.storchaka set nosy: + ethan.furman, barry, serhiy.storchaka, eli.benderskymessages: +
2018-06-14 17:57:40 adelfino set keywords: + patchstage: patch reviewpull_requests: + <pull%5Frequest7309>
2018-06-14 17:37:32 adelfino create