Вам нужно будет вызвать диспетчер контекста на self
, потому что __init__
фактически ничего не возвращает.
class MyFileIO2(io.FileIO):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
with self:
pass
def __enter__(self, *args, **kwargs):
f = super().__enter__(*args, **kwargs)
print('First byte of file: ', f.read(1))
return f
Для тестирования я создал двоичный файлс содержимым "hello world".
_ = MyFileIO2(path, 'rb')
# First byte of file: b'h'
Что происходит, так как возвращаемое значение super().__init__
передается через менеджер контекста, поэтому у вас фактически есть это:
with None:
pass
AttributeError: __enter__
Менеджер контекста пытается вызвать метод __enter__
для объекта NoneType
, но это недопустимая операция.