Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 520ad57

Browse files
committed
Change _names to _names_ since the latter is reserved for Enum use.
Before this change only the methods were _single_underscored_; now the attributes are as well.
1 parent 2aa2732 commit 520ad57

2 files changed

Lines changed: 42 additions & 41 deletions

File tree

Lib/enum.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ def __new__(metacls, cls, bases, classdict):
125125

126126
# create our new Enum type
127127
enum_class = super().__new__(metacls, cls, bases, classdict)
128-
enum_class._member_names = [] # names in definition order
129-
enum_class._member_map = OrderedDict() # name->value map
128+
enum_class._member_names_ = [] # names in definition order
129+
enum_class._member_map_ = OrderedDict() # name->value map
130130

131131
# Reverse value->name map for hashable values.
132-
enum_class._value2member_map = {}
132+
enum_class._value2member_map_ = {}
133133

134134
# check for a __getnewargs__, and if not present sabotage
135135
# pickling, since it won't work anyway
@@ -156,27 +156,27 @@ def __new__(metacls, cls, bases, classdict):
156156
else:
157157
enum_member = __new__(enum_class, *args)
158158
original_value = member_type(*args)
159-
if not hasattr(enum_member, '_value'):
160-
enum_member._value = original_value
161-
value = enum_member._value
162-
enum_member._member_type = member_type
163-
enum_member._name = member_name
159+
if not hasattr(enum_member, '_value_'):
160+
enum_member._value_ = original_value
161+
value = enum_member._value_
162+
enum_member._member_type_ = member_type
163+
enum_member._name_ = member_name
164164
enum_member.__init__(*args)
165165
# If another member with the same value was already defined, the
166166
# new member becomes an alias to the existing one.
167-
for name, canonical_member in enum_class._member_map.items():
168-
if canonical_member.value == enum_member._value:
167+
for name, canonical_member in enum_class._member_map_.items():
168+
if canonical_member.value == enum_member._value_:
169169
enum_member = canonical_member
170170
break
171171
else:
172172
# Aliases don't appear in member names (only in __members__).
173-
enum_class._member_names.append(member_name)
174-
enum_class._member_map[member_name] = enum_member
173+
enum_class._member_names_.append(member_name)
174+
enum_class._member_map_[member_name] = enum_member
175175
try:
176176
# This may fail if value is not hashable. We can't add the value
177177
# to the map, and by-value lookups for this value will be
178178
# linear.
179-
enum_class._value2member_map[value] = enum_member
179+
enum_class._value2member_map_[value] = enum_member
180180
except TypeError:
181181
pass
182182

@@ -221,10 +221,10 @@ def __call__(cls, value, names=None, *, module=None, type=None):
221221
return cls._create_(value, names, module=module, type=type)
222222

223223
def __contains__(cls, member):
224-
return isinstance(member, cls) and member.name in cls._member_map
224+
return isinstance(member, cls) and member.name in cls._member_map_
225225

226226
def __dir__(self):
227-
return ['__class__', '__doc__', '__members__'] + self._member_names
227+
return ['__class__', '__doc__', '__members__'] + self._member_names_
228228

229229
@property
230230
def __members__(cls):
@@ -234,7 +234,7 @@ def __members__(cls):
234234
is a read-only view of the internal mapping.
235235
236236
"""
237-
return MappingProxyType(cls._member_map)
237+
return MappingProxyType(cls._member_map_)
238238

239239
def __getattr__(cls, name):
240240
"""Return the enum member matching `name`
@@ -248,18 +248,18 @@ def __getattr__(cls, name):
248248
if _is_dunder(name):
249249
raise AttributeError(name)
250250
try:
251-
return cls._member_map[name]
251+
return cls._member_map_[name]
252252
except KeyError:
253253
raise AttributeError(name) from None
254254

255255
def __getitem__(cls, name):
256-
return cls._member_map[name]
256+
return cls._member_map_[name]
257257

258258
def __iter__(cls):
259-
return (cls._member_map[name] for name in cls._member_names)
259+
return (cls._member_map_[name] for name in cls._member_names_)
260260

261261
def __len__(cls):
262-
return len(cls._member_names)
262+
return len(cls._member_names_)
263263

264264
def __repr__(cls):
265265
return "<enum %r>" % cls.__name__
@@ -327,7 +327,7 @@ def _get_mixins_(bases):
327327
for base in bases:
328328
if (base is not Enum and
329329
issubclass(base, Enum) and
330-
base._member_names):
330+
base._member_names_):
331331
raise TypeError("Cannot extend enumerations")
332332
# base is now the last base in bases
333333
if not issubclass(base, Enum):
@@ -417,21 +417,21 @@ def __new__(cls, value):
417417
# by-value search for a matching enum member
418418
# see if it's in the reverse mapping (for hashable values)
419419
try:
420-
if value in cls._value2member_map:
421-
return cls._value2member_map[value]
420+
if value in cls._value2member_map_:
421+
return cls._value2member_map_[value]
422422
except TypeError:
423423
# not there, now do long search -- O(n) behavior
424-
for member in cls._member_map.values():
424+
for member in cls._member_map_.values():
425425
if member.value == value:
426426
return member
427427
raise ValueError("%s is not a valid %s" % (value, cls.__name__))
428428

429429
def __repr__(self):
430430
return "<%s.%s: %r>" % (
431-
self.__class__.__name__, self._name, self._value)
431+
self.__class__.__name__, self._name_, self._value_)
432432

433433
def __str__(self):
434-
return "%s.%s" % (self.__class__.__name__, self._name)
434+
return "%s.%s" % (self.__class__.__name__, self._name_)
435435

436436
def __dir__(self):
437437
return (['__class__', '__doc__', 'name', 'value'])
@@ -442,10 +442,10 @@ def __eq__(self, other):
442442
return NotImplemented
443443

444444
def __getnewargs__(self):
445-
return (self._value, )
445+
return (self._value_, )
446446

447447
def __hash__(self):
448-
return hash(self._name)
448+
return hash(self._name_)
449449

450450
# _RouteClassAttributeToGetattr is used to provide access to the `name`
451451
# and `value` properties of enum members while keeping some measure of
@@ -456,11 +456,11 @@ def __hash__(self):
456456

457457
@_RouteClassAttributeToGetattr
458458
def name(self):
459-
return self._name
459+
return self._name_
460460

461461
@_RouteClassAttributeToGetattr
462462
def value(self):
463-
return self._value
463+
return self._value_
464464

465465

466466
class IntEnum(int, Enum):

Lib/test/test_enum.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ class Why(Enum):
516516
def question(self):
517517
print(42)
518518
self.assertIsNot(type(Why.question), Why)
519-
self.assertNotIn(Why.question, Why._member_names)
519+
self.assertNotIn(Why.question, Why._member_names_)
520520
self.assertNotIn(Why.question, Why)
521521

522522
def test_wrong_inheritance_order(self):
@@ -777,10 +777,10 @@ class AutoNumber(Enum):
777777
def __new__(cls):
778778
value = len(cls.__members__) + 1
779779
obj = object.__new__(cls)
780-
obj._value = value
780+
obj._value_ = value
781781
return obj
782782
def __int__(self):
783-
return int(self._value)
783+
return int(self._value_)
784784
self.assertEqual(
785785
list(AutoNumber),
786786
[AutoNumber.first, AutoNumber.second, AutoNumber.third],
@@ -794,10 +794,10 @@ class AutoNumber(Enum):
794794
def __new__(cls):
795795
value = len(cls.__members__) + 1
796796
obj = object.__new__(cls)
797-
obj._value = value
797+
obj._value_ = value
798798
return obj
799799
def __int__(self):
800-
return int(self._value)
800+
return int(self._value_)
801801
class Color(AutoNumber):
802802
red = ()
803803
green = ()
@@ -810,7 +810,7 @@ class AutoNumber(IntEnum):
810810
def __new__(cls):
811811
value = len(cls.__members__) + 1
812812
obj = int.__new__(cls, value)
813-
obj._value = value
813+
obj._value_ = value
814814
return obj
815815
class Color(AutoNumber):
816816
red = ()
@@ -823,19 +823,19 @@ def test_ordered_mixin(self):
823823
class OrderedEnum(Enum):
824824
def __ge__(self, other):
825825
if self.__class__ is other.__class__:
826-
return self._value >= other._value
826+
return self._value_ >= other._value_
827827
return NotImplemented
828828
def __gt__(self, other):
829829
if self.__class__ is other.__class__:
830-
return self._value > other._value
830+
return self._value_ > other._value_
831831
return NotImplemented
832832
def __le__(self, other):
833833
if self.__class__ is other.__class__:
834-
return self._value <= other._value
834+
return self._value_ <= other._value_
835835
return NotImplemented
836836
def __lt__(self, other):
837837
if self.__class__ is other.__class__:
838-
return self._value < other._value
838+
return self._value_ < other._value_
839839
return NotImplemented
840840
class Grade(OrderedEnum):
841841
A = 5
@@ -847,6 +847,7 @@ class Grade(OrderedEnum):
847847
self.assertLessEqual(Grade.F, Grade.C)
848848
self.assertLess(Grade.D, Grade.A)
849849
self.assertGreaterEqual(Grade.B, Grade.B)
850+
850851
def test_extending2(self):
851852
class Shade(Enum):
852853
def shade(self):
@@ -923,7 +924,7 @@ class AutoNumberInAList(Enum):
923924
def __new__(cls):
924925
value = [len(cls.__members__) + 1]
925926
obj = object.__new__(cls)
926-
obj._value = value
927+
obj._value_ = value
927928
return obj
928929
class ColorInAList(AutoNumberInAList):
929930
red = ()

0 commit comments

Comments
 (0)