eval falha na compreensão da lista [duplicado]

Esta pergunta já tem uma resposta aqui:

Python: Como posso executar eval () no escopo local de uma função 2 respostas

Considere o seguinte código hipotético:

class B(object):
    def __init__(self):
        self.b = 2

    def foo(self):
        out1 = [eval('self.b')]    # ok
        print(out1)                # prints: [2]
        out2 = [eval(cmd) for cmd in ['self.b']]    # fails
        print(out2)    # NameError: name 'self' is not defined

b = B()
b.foo()

Por que a declaração deout1 ok, mas não paraout2, que fornece o erro "'self' não está definido"?

Estou aprendendo Python e resolvi esse problema enquanto experimentava oeval. Sim, eu sei o uso deeval neste exemplo é inapropriado, mas apenas para levar esse exemplo ao valor nominal, alguém pode explicar por que a instrução paraout2 dá a mensagem de erro? Parece que ambas as declarações devem funcionar e fornecer o mesmo resultad

Obrigado por qualquer orientação.

questionAnswers(1)

yourAnswerToTheQuestion