На первый взгляд может показаться немного странным, но
with babby() as b:
...
равно не эквивалентно
b = babby()
with b:
...
Чтобы понять почему, вот как будет реализован менеджер контекста:
class babby(object):
def __enter__(self):
return 'frigth'
def __exit__(self, type, value, tb):
pass
В первом случае имя b
будет связано с тем, что возвращается из метода __enter__
диспетчера контекста. Часто это сам менеджер контекста (например, для файловых объектов), но это не обязательно; в данном случае это строка 'frigth'
, а в вашем случае это курсор базы данных.
Во втором случае b
- это сам объект диспетчера контекста.