Python 创建可以打开的文件包装器

Python 创建可以打开的文件包装器,python,file,wrapper,Python,File,Wrapper,我需要处理一个包含专门内容的ZIP文件,因此需要创建一个包装器,这样我就可以使用 with open(MySpecialFile('/path/to/file.zip', 'rb')) as msf: <snip> 创建可使用open()打开的自定义对象的正确方法是什么?没有打开方法。相反,您应该创建一些实现。一个简单的类只要实现了所有必要的方法就可以了 然后你可以说: with openMySpecialFile('/path/to/file.zip', 'rb') as

我需要处理一个包含专门内容的ZIP文件,因此需要创建一个包装器,这样我就可以使用

with open(MySpecialFile('/path/to/file.zip', 'rb')) as msf:
    <snip>

创建可使用
open()
打开的自定义对象的正确方法是什么?

没有
打开方法。相反,您应该创建一些实现。一个简单的类只要实现了所有必要的方法就可以了

然后你可以说:

with openMySpecialFile('/path/to/file.zip', 'rb') as msf:
    ...

其中,
openMySpecialFile()
是一个工厂函数,它在上面的“某物”实例中构建并返回它。

并没有
\uuuuuu open\uu
方法。相反,您应该创建一些实现。一个简单的类只要实现了所有必要的方法就可以了

然后你可以说:

with openMySpecialFile('/path/to/file.zip', 'rb') as msf:
    ...

其中,
openMySpecialFile()
是一个工厂函数,它在上面的“某物”实例中构建并返回它。

或只需包装
打开

class Foo(object):
    def __init__(self, fpath, mode):
        self.f = fpath
        self.mode = mode
    def __enter__(self):
        print 'context begun'
        self.file = open(self.f, self.mode)
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        print 'closing:', exc_type, exc_val, exc_tb
        self.file.close()
    def __str__(self):
        return self.f
with Foo('file.spc', 'rb') as f:
    print f.read()

>>> 
context begun
filecontentsfilecontentsfilecontentsfilecontents


closing: None None None
>>> 

或者只需将
打开

class Foo(object):
    def __init__(self, fpath, mode):
        self.f = fpath
        self.mode = mode
    def __enter__(self):
        print 'context begun'
        self.file = open(self.f, self.mode)
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        print 'closing:', exc_type, exc_val, exc_tb
        self.file.close()
    def __str__(self):
        return self.f
with Foo('file.spc', 'rb') as f:
    print f.read()

>>> 
context begun
filecontentsfilecontentsfilecontentsfilecontents


closing: None None None
>>> 

所以我假设没有办法直接在我的包装器实例上使用内置的open(),那么我假设没有办法直接在我的包装器实例上使用内置的open()?