Хотя существует множество способов обойти это, из-за индивидуальной ошибки я не могу допустить этого, пока не пойму природу отказа.Атрибут класса словаря, который относится к другим атрибутам класса в определении
Попытка:
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
завершается с:
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
Почему? Почему он может найти UNKNOWN
, но не FAVE
? Это потому, что это в понимании словаря?
В том, что я хотел бы добавить, наиболее предпочтительный путь вокруг этого будет определять (некоторые или все) эти переменные в методе '__init __()' класса с 'self.FAVE = [...]'. – Sam
Спасибо! Но это все еще так странно; почему этот случай? Я думал, что всегда было так, что вложенные области имели доступ к родительской области в Python. По крайней мере, так было в моем опыте. – eriophora
@eriophora: Области классов разные. См. Вопрос, который я связал, для некоторого обсуждения этого. – BrenBarn