Цель выражения `with` в python неожиданно отсутствует - PullRequest
13 голосов
/ 29 января 2011

кажется, что я не понимаю что-то с --- оператором python with.

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

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

сейчас, при использовании его с with,как в

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

Я бы ожидал некоторый вывод, как .Но я получаю Нет .

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

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

РЕДАКТИРОВАТЬ:

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

    def __enter__(self): return self

Ответы [ 3 ]

18 голосов
/ 29 января 2011

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

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

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

2 голосов
/ 29 января 2011

С документы :

object.__enter__(self)

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

0 голосов
/ 29 января 2011

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

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

m.__repr__()

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

...