From f203f2d51da404fd59cbfbf40201fe30bd9ea79c Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Fri, 6 Sep 2013 07:16:48 -0700 Subject: Close #18924: Block naive attempts to change an Enum member. --- Lib/enum.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Lib/enum.py') diff --git a/Lib/enum.py b/Lib/enum.py index 8219005bb6..82058ae924 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -263,6 +263,19 @@ class EnumMeta(type): def __repr__(cls): return "" % cls.__name__ + def __setattr__(cls, name, value): + """Block attempts to reassign Enum members. + + A simple assignment to the class namespace only changes one of the + several possible ways to get an Enum member from the Enum class, + resulting in an inconsistent Enumeration. + + """ + member_map = cls.__dict__.get('_member_map_', {}) + if name in member_map: + raise AttributeError('Cannot reassign members.') + super().__setattr__(name, value) + def _create_(cls, class_name, names=None, *, module=None, type=None): """Convenience method to create a new Enum class. -- cgit v1.2.1