Undefined global en la expresión del generador de listas usando python3, funciona con python2, ¿qué cambios son necesarios?

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

Esto funciona bien con Python2.7. Sin embargo python3 dice:

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

Aunque puedo solucionar el problema, me gustaría saber cuál es la diferencia entre Python2 y Python3. He leído Python 2-> 3 documentos de cambios, pero no pude identificar ninguna descripción relacionada con mi problema. también2to3 La herramienta no se queja de nada en mi código.

Por cierto, aunque no puedo recordar la situación ahora, pero tuve algo similar con python2solamente también (ni siquiera lo he intentado con 3), pensé que debería funcionar (dentro de una clase):

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

Sin embargo, causa python2 diciendo:NameError: name 'self' is not defined No he probado esto con python3 todavía, pero por ejemplo esto funciona:

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

Si cambio la parte relevante del ejemplo anterior a esta (bueno, el ejemplo en sí es un poco estúpido, pero al menos muestra mi problema). Ahora estoy muy curioso, por queself ¿Parece que no está definido para este primer ejemplo pero es para el segundo? Parece que con los dictados, tengo un problema similar del que trata mi pregunta original, pero con la expresión del generador de listas funciona, pero no en python3. Hmmm ...

Después de mi problema con python2 -> 3 mencioné esto, ya que todo esto parece ser sobre el problema de que algo no está definido de acuerdo con el intérprete de python (y tal vez la segunda parte de mi pregunta no esté relacionada). Me siento bastante confundido ahora. Por favor, ilumíneme sobre mi error (ya que estoy seguro de que me perdí algo, por supuesto).

Respuestas a la pregunta(1)

Su respuesta a la pregunta