diff -r ed590800fde7 Lib/enum.py --- a/Lib/enum.py Sun Sep 15 10:37:57 2013 +0200 +++ b/Lib/enum.py Sun Sep 15 23:08:11 2013 +0800 @@ -222,6 +222,17 @@ def __contains__(cls, member): return isinstance(member, cls) and member.name in cls._member_map_ + def __delattr__(cls, attr): + if attr in cls._member_map_: + raise TypeError("Cannot delete attribute") + super(EnumMeta, cls).__delattr__(attr) + + def __delitem__(cls, key): + if key in cls._member_map_: + raise TypeError("Cannot delete item") + else: + raise KeyError(key) + def __dir__(self): return ['__class__', '__doc__', '__members__'] + self._member_names_ diff -r ed590800fde7 Lib/test/test_enum.py --- a/Lib/test/test_enum.py Sun Sep 15 10:37:57 2013 +0200 +++ b/Lib/test/test_enum.py Sun Sep 15 23:08:11 2013 +0800 @@ -1003,6 +1003,29 @@ yellow = 6 self.assertEqual(MoreColor.magenta.hex(), '5 hexlified!') + def test_attribute_deletion(self): + class Season(Enum): + SPRING = 1 + SUMMER = 2 + AUTUMN = 3 + WINTER = 4 + + def spam(cls): pass + + self.assertTrue(hasattr(Season, 'spam')) + del Season.spam + self.assertFalse(hasattr(Season, 'spam')) + + with self.assertRaises(TypeError): + del Season.SPRING + with self.assertRaises(TypeError): + del Season['SPRING'] + with self.assertRaises(AttributeError): + del Season.DRY + with self.assertRaises(KeyError): + del Season['DRY'] + with self.assertRaises(AttributeError): + del Season.SPRING.name def test_no_duplicates(self): class UniqueEnum(Enum):