mirror of
https://github.com/python/cpython.git
synced 2025-11-07 09:02:02 +00:00
[3.11] gh-93910: [Enum] remove member.member deprecation (GH-103236) (GH-103299)
i.e. Color.RED.BLUE is now officially supported..
(cherry picked from commit 4ec8dd10bd)
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
parent
0291397c57
commit
58e330ac9c
4 changed files with 36 additions and 42 deletions
42
Lib/enum.py
42
Lib/enum.py
|
|
@ -199,9 +199,13 @@ def __get__(self, instance, ownerclass=None):
|
|||
)
|
||||
else:
|
||||
if self.fget is None:
|
||||
raise AttributeError(
|
||||
'%r member has no attribute %r' % (ownerclass, self.name)
|
||||
)
|
||||
# look for a member by this name.
|
||||
try:
|
||||
return ownerclass._member_map_[self.name]
|
||||
except KeyError:
|
||||
raise AttributeError(
|
||||
'%r has no attribute %r' % (ownerclass, self.name)
|
||||
) from None
|
||||
else:
|
||||
return self.fget(instance)
|
||||
|
||||
|
|
@ -298,29 +302,29 @@ def __set_name__(self, enum_class, member_name):
|
|||
):
|
||||
# no other instances found, record this member in _member_names_
|
||||
enum_class._member_names_.append(member_name)
|
||||
# get redirect in place before adding to _member_map_
|
||||
# but check for other instances in parent classes first
|
||||
need_override = False
|
||||
descriptor = None
|
||||
# if necessary, get redirect in place and then add it to _member_map_
|
||||
found_descriptor = None
|
||||
for base in enum_class.__mro__[1:]:
|
||||
descriptor = base.__dict__.get(member_name)
|
||||
if descriptor is not None:
|
||||
if isinstance(descriptor, (property, DynamicClassAttribute)):
|
||||
found_descriptor = descriptor
|
||||
break
|
||||
else:
|
||||
need_override = True
|
||||
# keep looking for an enum.property
|
||||
if descriptor and not need_override:
|
||||
# previous enum.property found, no further action needed
|
||||
pass
|
||||
elif descriptor and need_override:
|
||||
elif (
|
||||
hasattr(descriptor, 'fget') and
|
||||
hasattr(descriptor, 'fset') and
|
||||
hasattr(descriptor, 'fdel')
|
||||
):
|
||||
found_descriptor = descriptor
|
||||
continue
|
||||
if found_descriptor:
|
||||
redirect = property()
|
||||
redirect.member = enum_member
|
||||
redirect.__set_name__(enum_class, member_name)
|
||||
# Previous enum.property found, but some other inherited attribute
|
||||
# is in the way; copy fget, fset, fdel to this one.
|
||||
redirect.fget = descriptor.fget
|
||||
redirect.fset = descriptor.fset
|
||||
redirect.fdel = descriptor.fdel
|
||||
# earlier descriptor found; copy fget, fset, fdel to this one.
|
||||
redirect.fget = found_descriptor.fget
|
||||
redirect.fset = found_descriptor.fset
|
||||
redirect.fdel = found_descriptor.fdel
|
||||
setattr(enum_class, member_name, redirect)
|
||||
else:
|
||||
setattr(enum_class, member_name, enum_member)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue