проблема с использованием экземпляра в with_statement

StackOverflow https://stackoverflow.com/questions/469950

  •  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 (возвращаемое значение по умолчанию)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top