Здесь сюрприз:
>>> class B:
... print(locals())
... def foo(self):
... print(locals())
... print(__class__ in locals().values())
...
{'__module__': '__main__', '__qualname__': 'B'}
>>> B().foo()
{'__class__': <class '__main__.B'>, 'self': <__main__.B object at 0x7fffe916b4a8>}
True
Кажется, что простое упоминание __class__
явно проверяется парсером? В противном случае мы должны получить что-то вроде
NameError: name '__class__' is not defined
В самом деле, если вы модифицируете, чтобы проверить только ключ, т.е. проверить на '__class__' in locals()
, тогда у нас есть только self
в области видимости.
Как происходит, что эта переменная волшебным образом вводится в область видимости? Я предполагаю, что это как-то связано с super
- но я не использовал super
, поэтому почему компилятор создает ссылку на неявное замыкание здесь, если это не нужно?