Python `with` statement target неожиданно отсутствует

похоже, что я ничего не понимаю с помощью инструкции python with.

Рассмотрим этот класс:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass

теперь, когда он используется с with, как в

with test() as michael:
    print repr(michael)

Я бы ожидал, что какой-то вывод будет похож на экземпляр test в memore blah > . Но я получаю None.

Что-то здесь не так? Любые предложения помогут.

(Я использую Python 2.6.6.)

EDIT:

Благодаря ephement для указания на документацию. Метод __enter__ должен читать

    def __enter__(self): return self

Ответы

Ответ 1

Из with документация:

Если цель была включена в оператор with, ему присваивается возвращаемое значение из __enter__().

Если вы def __enter__(self): return self, тогда будет создан ваш ожидаемый результат.

Ответ 2

Из документы:

object.__enter__(self)

Введите контекст среды выполнения, связанный с этим объектом. Оператор with свяжет эти методы с возвращаемым значением с целевыми объектами, указанными в предложении as оператора, если таковые имеются.

Ответ 3

Я получаю то же самое для repr(michael)

Попробуйте это вместо:

m.__repr__()

Я не совсем уверен, но я думаю, что это связано с тем, что вы не определили метод repr в своем классе test