@@ -66,6 +66,7 @@ def __init__(self):
6666 self ._member_names = []
6767 self ._last_values = []
6868 self ._ignore = []
69+ self ._auto_called = False
6970
7071 def __setitem__ (self , key , value ):
7172 """Changes anything not dundered or not a descriptor.
@@ -83,6 +84,9 @@ def __setitem__(self, key, value):
8384 ):
8485 raise ValueError ('_names_ are reserved for future Enum use' )
8586 if key == '_generate_next_value_' :
87+ # check if members already defined as auto()
88+ if self ._auto_called :
89+ raise TypeError ("_generate_next_value_ must be defined before members" )
8690 setattr (self , '_generate_next_value' , value )
8791 elif key == '_ignore_' :
8892 if isinstance (value , str ):
@@ -106,6 +110,7 @@ def __setitem__(self, key, value):
106110 # enum overwriting a descriptor?
107111 raise TypeError ('%r already defined as: %r' % (key , self [key ]))
108112 if isinstance (value , auto ):
113+ self ._auto_called = True
109114 if value .value == _auto_null :
110115 value .value = self ._generate_next_value (key , 1 , len (self ._member_names ), self ._last_values [:])
111116 value = value .value
0 commit comments