Измените определение X
на
class X(object):
var1 = 1
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
with
присваивает возвращаемое значение метода __enter__()
имени после as
.Ваш __enter__()
вернул None
, который был назначен на z
.
Я также изменил класс на класс нового стиля (что не критично для его работы).