проблема с использованием экземпляра в with_statement
-
19-08-2019 - |
Вопрос
Недавно я начал изучать Python и достиг уровня с заявление .Я пытался использовать его с экземпляром класса, но думаю, что делаю что-то неправильно.Вот код:
from __future__ import with_statement
import pdb
class Geo:
def __init__(self,text):
self.text = text
def __enter__(self):
print "entering"
def __exit__(self,exception_type,exception_value,exception_traceback):
print "exiting"
def ok(self):
print self.text
def __get(self):
return self.text
with Geo("line") as g :
g.ok()
Дело в том, что когда переводчик доходит до хорошо внутри оператора with возникает следующее исключение:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
Почему объект g имеет тип NoneType?Как я могу использовать экземпляр с с заявление ?
Решение
Твой __enter__
методу необходимо вернуть объект, который следует использовать для "as g
" часть оператора with.См. документация, где указано:
- Если цель была включена в оператор with, возвращаемое значение из
__enter__()
ему присвоено.
В настоящее время у него нет оператора возврата, поэтому g привязан к None
(возвращаемое значение по умолчанию)
Не связан с StackOverflow