mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-40025: Require _generate_next_value_ to be defined before members (GH-19098)
require `_generate_next_value_` to be defined before members
This commit is contained in:
parent
a42ca74fa3
commit
d9a43e20fa
5 changed files with 21 additions and 0 deletions
|
@ -60,6 +60,7 @@ class _EnumDict(dict):
|
|||
self._member_names = []
|
||||
self._last_values = []
|
||||
self._ignore = []
|
||||
self._auto_called = False
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
"""Changes anything not dundered or not a descriptor.
|
||||
|
@ -77,6 +78,9 @@ class _EnumDict(dict):
|
|||
):
|
||||
raise ValueError('_names_ are reserved for future Enum use')
|
||||
if key == '_generate_next_value_':
|
||||
# check if members already defined as auto()
|
||||
if self._auto_called:
|
||||
raise TypeError("_generate_next_value_ must be defined before members")
|
||||
setattr(self, '_generate_next_value', value)
|
||||
elif key == '_ignore_':
|
||||
if isinstance(value, str):
|
||||
|
@ -100,6 +104,7 @@ class _EnumDict(dict):
|
|||
# enum overwriting a descriptor?
|
||||
raise TypeError('%r already defined as: %r' % (key, self[key]))
|
||||
if isinstance(value, auto):
|
||||
self._auto_called = True
|
||||
if value.value == _auto_null:
|
||||
value.value = self._generate_next_value(key, 1, len(self._member_names), self._last_values[:])
|
||||
value = value.value
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue