1 回答

TA貢獻1869條經(jīng)驗 獲得超4個贊
您將需要在 上調(diào)用上下文管理器self,因為__init__實際上不會返回任何內(nèi)容。
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
為了測試,我創(chuàng)建了一個內(nèi)容為“hello world”的二進制文件。
_ = MyFileIO2(path, 'rb')
# First byte of file: b'h'
發(fā)生的事情是super().__init__通過上下文管理器傳遞的返回值,因此您有效地擁有:
with None:
pass
AttributeError: __enter__
上下文管理器嘗試調(diào)用對象__enter__上的方法NoneType,但這是一個無效的操作。
添加回答
舉報