MCPcopy Index your code
hub / github.com/python/cpython / __set_name__

Method __set_name__

Lib/enum.py:240–325  ·  view source on GitHub ↗

convert each quasi-member into an instance of the new enum class

(self, enum_class, member_name)

Source from the content-addressed store, hash-verified

238 self.value = value
239
240 def __set_name__(self, enum_class, member_name):
241 """
242 convert each quasi-member into an instance of the new enum class
243 """
244 # first step: remove ourself from enum_class
245 delattr(enum_class, member_name)
246 # second step: create member based on enum_class
247 value = self.value
248 if not isinstance(value, tuple):
249 args = (value, )
250 else:
251 args = value
252 if enum_class._member_type_ is tuple: # special case for tuple enums
253 args = (args, ) # wrap it one more time
254 if not enum_class._use_args_:
255 enum_member = enum_class._new_member_(enum_class)
256 else:
257 enum_member = enum_class._new_member_(enum_class, *args)
258 if not hasattr(enum_member, '_value_'):
259 if enum_class._member_type_ is object:
260 enum_member._value_ = value
261 else:
262 try:
263 enum_member._value_ = enum_class._member_type_(*args)
264 except Exception as exc:
265 new_exc = TypeError(
266 '_value_ not set in __new__, unable to create it'
267 )
268 new_exc.__cause__ = exc
269 raise new_exc
270 value = enum_member._value_
271 enum_member._name_ = member_name
272 enum_member.__objclass__ = enum_class
273 enum_member.__init__(*args)
274 enum_member._sort_order_ = len(enum_class._member_names_)
275
276 if Flag is not None and issubclass(enum_class, Flag):
277 if isinstance(value, int):
278 enum_class._flag_mask_ |= value
279 if _is_single_bit(value):
280 enum_class._singles_mask_ |= value
281 enum_class._all_bits_ = 2 ** ((enum_class._flag_mask_).bit_length()) - 1
282
283 # If another member with the same value was already defined, the
284 # new member becomes an alias to the existing one.
285 try:
286 try:
287 # try to do a fast lookup to avoid the quadratic loop
288 enum_member = enum_class._value2member_map_[value]
289 except TypeError:
290 for name, canonical_member in enum_class._member_map_.items():
291 if canonical_member._value_ == value:
292 enum_member = canonical_member
293 break
294 else:
295 raise KeyError
296 except KeyError:
297 # this could still be an alias if the value is multi-bit and the

Callers

nothing calls this directly

Calls 7

_is_single_bitFunction · 0.85
bit_lengthMethod · 0.80
_add_member_Method · 0.80
__init__Method · 0.45
itemsMethod · 0.45
appendMethod · 0.45
setdefaultMethod · 0.45

Tested by

no test coverage detected