@@ -60,6 +60,7 @@ def __init__(self):
60
60
self ._member_names = []
61
61
self ._last_values = []
62
62
self ._ignore = []
63
+ self ._auto_called = False
63
64
64
65
def __setitem__ (self , key , value ):
65
66
"""Changes anything not dundered or not a descriptor.
@@ -77,6 +78,9 @@ def __setitem__(self, key, value):
77
78
):
78
79
raise ValueError ('_names_ are reserved for future Enum use' )
79
80
if key == '_generate_next_value_' :
81
+ # check if members already defined as auto()
82
+ if self ._auto_called :
83
+ raise TypeError ("_generate_next_value_ must be defined before members" )
80
84
setattr (self , '_generate_next_value' , value )
81
85
elif key == '_ignore_' :
82
86
if isinstance (value , str ):
@@ -100,6 +104,7 @@ def __setitem__(self, key, value):
100
104
# enum overwriting a descriptor?
101
105
raise TypeError ('%r already defined as: %r' % (key , self [key ]))
102
106
if isinstance (value , auto ):
107
+ self ._auto_called = True
103
108
if value .value == _auto_null :
104
109
value .value = self ._generate_next_value (key , 1 , len (self ._member_names ), self ._last_values [:])
105
110
value = value .value
0 commit comments