אורי wrote: > Why does this not work: > > class User(ValidateUserPasswordMixin, PermissionsMixin, Entity, > AbstractBaseUser):
> GENDER_VALID_VALUES = [choice[0] for choice in GENDER_CHOICES] > GENDERS_DICT = {GENDER_FEMALE: GENDER_FEMALE_STRING, GENDER_MALE: > ALL_GENDERS = [GENDERS_DICT[gender] for gender in GENDER_VALID_VALUES] > > (it throws an exception: `NameError: name 'GENDERS_DICT' is not defined`) The list comprehension in Python 3 works like a generator generator expression: https://www.python.org/dev/peps/pep-0289/?modTest=#the-details In your case GENDER_VALID_VALUES is looked up in the class, and GENDERS_DICT is looked up in the function synthesized from the list comprehension. As with methods this function only sees the local and the global namespace, but not the class namespace. I realise that this is a long-winded way of saying "it is like it is", but maybe it helps you understand what works and what doesn't. This would work for example (not recommended for actual use): ALL_GENDERS = [ GENDERS_DICT[gender] for gender, GENDERS_DICT in zip(GENDER_VALID_VALUES, itertools.repeat(GENDERS_DICT)) ] > But this works: > User.ALL_GENDERS = [User.GENDERS_DICT[gender] for gender in > User.GENDER_VALID_VALUES] User exists in the global namespace, and has both attributes, so no surprises here. -- https://mail.python.org/mailman/listinfo/python-list