Indefinido global na expressão do gerador de lista usando python3, funciona com python2, quais mudanças são necessárias?

class Some(object):
    tokens = [ ... list of strings ... ]
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
    ... etc ...
some = Some()

Isso funciona bem com o Python2.7. No entanto python3 diz:

Traceback (most recent call last):
File "./test.py", line 17, in <module>
    class Some(object):
File "./test.py", line 42, in Some
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
File "./test.py", line 42, in <listcomp>
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
NameError: global name 'tokens' is not defined

Embora eu possa contornar o problema, eu realmente gostaria de saber a diferença entre o Python2 e o Python3. Eu li os documentos do python 2-> 3 changes, mas não consegui identificar nenhuma descrição relacionada ao meu problema. Além disso2to3 ferramenta não reclama nada no meu código.

By the way, embora eu não possa lembrar a situação agora, mas eu tinha algo semelhante com python2só também (eu nem tentei isso com 3), eu pensei que isso deveria funcionar (dentro de uma classe):

def some_method(self):
    return {a: eval("self." + a) for a in dir(self) if not a.startswith("_")}

No entanto, faz com que python2 diga:NameError: name 'self' is not defined Eu não tentei isso com python3 ainda, mas por exemplo, isso funciona:

[eval("self." + a) for a in dir(self) if not a.startswith("_")]

Se eu mudar a parte relevante do exemplo anterior para esta (ok, o exemplo em si é um pouco estúpido, mas mostra o meu problema, pelo menos). Agora estou muito curioso, porqueself parece não ser definido para este primeiro exemplo, mas é para o segundo? Parece com dicts, eu tenho problema semelhante que minha pergunta original é sobre, mas com a expressão de gerador de lista funciona, mas não em python3. Hmmm ...

Depois do meu problema python2 -> 3 eu mencionei isto, já que todos estes parecem ser sobre o problema que algo não é definido de acordo com o interpretador python (e talvez a segunda parte da minha questão não esteja relacionada?). Eu me sinto muito confuso agora. Por favor, esclarecer-me sobre o meu erro (desde que eu tenho certeza que eu perdi alguma coisa, claro).

questionAnswers(1)

yourAnswerToTheQuestion