Как сделать класс python контекстным менеджером - PullRequest
0 голосов
/ 31 марта 2020

Я считаю, что я, должно быть, допускаю простую ошибку в своем коде. Я определяю свой класс следующим образом

class Simple():
    def __init__(self):
        self.string = "Hello World"

    def __enter__(self):
        pass

    def __exit__(self):
        pass

и называю его следующим образом:

with Simple() as simple_test:
    print(simple_test.string)

Я получаю следующую ошибку:

    print(simple_test.string)
AttributeError: 'NoneType' object has no attribute 'string'

Почему мой класс None

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Метод __enter__ должен возвращать self:

def __enter__(self):
    return self
0 голосов
/ 31 марта 2020

__enter__ должен вернуть все, что вы хотите связать в предложении as, см. python документы .

Поскольку ваш __enter__ ничего не возвращает, значение, связанное с simple_test, равно None.

Я думаю, вы хотите это:

class Simple():
    def __init__(self):
        self.string = "Hello World"

    def __enter__(self):
        return self

    def __exit__(self):
        pass
...