Ответ 1
Из with
документация:
Если цель была включена в оператор
with
, ему присваивается возвращаемое значение из__enter__()
.
Если вы def __enter__(self): return self
, тогда будет создан ваш ожидаемый результат.
похоже, что я ничего не понимаю с помощью инструкции 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
Из with
документация:
Если цель была включена в оператор
with
, ему присваивается возвращаемое значение из__enter__()
.
Если вы def __enter__(self): return self
, тогда будет создан ваш ожидаемый результат.
Из документы:
object.__enter__(self)
Введите контекст среды выполнения, связанный с этим объектом. Оператор
with
свяжет эти методы с возвращаемым значением с целевыми объектами, указанными в предложенииas
оператора, если таковые имеются.
Я получаю то же самое для repr(michael)
Попробуйте это вместо:
m.__repr__()
Я не совсем уверен, но я думаю, что это связано с тем, что вы не определили метод repr
в своем классе test