Atributo de classe de dicionário que se refere a outros atributos de classe na definição

Embora existam várias maneiras de contornar isso, por causa de uma falha de personalidade, não posso deixar passar até entender a natureza do fracasso.

Tentativa:

class OurFavAnimals(object):
    FAVE = 'THATS ONE OF OUR FAVORITES'
    NOTFAVE = 'NAH WE DONT CARE FOR THAT ONE'
    UNKNOWN = 'WHAT?'
    FAVES = defaultdict(lambda: UNKNOWN, {x:FAVE for x in ['dog', 'cat']})
    FAVES['Crab'] = NOTFAVE 

Falha com:

      3     NOTFAVE = 'NAH WE DONT CARE FOR THAT ONE'
      4     UNKNOWN = 'WHAT?'
----> 5     FAVES = defaultdict(lambda: UNKNOWN, {x:FAVE for x in ['dog', 'cat']})
      6     FAVES['Crab'] = NOTFAVE

NameError: global name 'FAVE' is not defined

Por quê? Por que ele pode encontrarUNKNOWN mas nãoFAVE? É porque está em uma compreensão de dicionário?

questionAnswers(1)

yourAnswerToTheQuestion