要获得完整的python文件接口,我需要实现的文件方法的最小子集是什么?
Python有一个奇妙的模块,它有一些工具可以让您从一组最小的方法实现完整的要获得完整的python文件接口,我需要实现的文件方法的最小子集是什么?,python,Python,Python有一个奇妙的模块,它有一些工具可以让您从一组最小的方法实现完整的dict(例如)。Python中的文件接口是否也有类似的功能?如果不是,您会推荐哪一组最小的方法来实现类文件对象的duck键入 您如何处理那些希望在with语句中使用类似文件的对象的事情,比如您可以使用常规文件,或者谁希望迭代它(就像您可以使用常规文件),或者谁希望能够调用readline或readlines,并让它做一些智能和有用的事情(就像使用常规文件一样)?您必须自己实现它们吗?还是有更好的选择 我知道我可以自己手
dict
(例如)。Python中的文件
接口是否也有类似的功能?如果不是,您会推荐哪一组最小的方法来实现类文件
对象的duck键入
您如何处理那些希望在with
语句中使用类似文件的对象的事情,比如您可以使用常规文件,或者谁希望迭代它(就像您可以使用常规文件),或者谁希望能够调用readline
或readlines
,并让它做一些智能和有用的事情(就像使用常规文件一样)?您必须自己实现它们吗?还是有更好的选择
我知道我可以自己手工实现其中的每一个。但是集合
界面允许我通过实现\uuu len\uuuuuuuuuuuu
,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,来实现一个>,更新
,设置默认值
,包含
,键
,项
,值
,获取
,等式
,以及所有免费。定义了的dict
有一个最小的接口,如果我实现了它,我会得到完整的dict,所有的接口f根据最小接口实现的额外方法
类似地,我想知道为了获得完整的接口,我必须实现的文件的最小接口是什么。如果我只实现了读取
,写入,读取
,读取行
,读取行
,输入
,以及下一步
,是否有办法de>和关闭
,或者每次我想要完整的文件
界面时,我都必须自己手动实现所有内容吗?我会查看io.IOBase[1]和io.RawIOBase是否兼容>2.6。这将使您继续使用3.x(io实现3.x文件界面)
[1] 你自己回答了。虽然没有一套实现文件接口所需的“特殊”方法,但你只需提供几个通常与文件相关的方法就可以实现。Duck类型处理其余的问题
您实际上只需要一个读取
和/或写入
方法(取决于您希望它是可读的还是可写的)其行为与普通文件对象相同。您可以查看引用以查看文件对象的所有方法。基本上,您实现的越多,您的类代替文件工作的情况就越多。(例如,如果您实现seek
,则它将在对文件执行查找的任何函数中工作。)请注意,这里有一个连续统一体,没有绝对的“它支持或不支持文件协议”。事实上,在所有支持类似文件的对象的地方都无法100%工作,因为有些代码将访问真实文件类型的低级细节,而您的代码在那里无法工作
总之,任何实现read
和write
的类都可以在大多数需要“类似文件的对象”的情况下工作
(请注意,dict的特殊方法名称,如\uuu getitem\uuu
,实际上并不特殊,除非它们由特殊语法使用,如[key]
——这就是dict有特殊方法名称而文件没有的原因。)with语句需要一个上下文管理器:
文件类型已完全定义:
看起来很简单
文档列出了文件和上下文管理器的方法和属性。请实现它们
你还需要什么信息
如果你想让所有的方法都起作用,你就必须实现所有的方法。与集合不同,文件没有抽象的基类。我了解读
和写
。但是有些事情取决于\uu iter\uuuu
和读线
以及文件的其他特性。我该如何处理那些需要不用重新实现它们就可以了?或者更好的是,Python对我自己的类文件对象的特殊换行处理?这个答案对我来说真的不起作用,因为它意味着我必须重新实现整个文件功能(缓冲、换行处理、读线、写线、\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。“这个答案对我来说确实不起作用,因为它意味着我必须重新实现一整套文件功能"与此无关。很遗憾,你必须实现所有内容。这不会改变答案,是吗?这些看起来像是我所追求的开始,但它们的文档有点混乱。无论如何,感谢你指点我。不客气,在阅读了你的其他评论文本后,IO可能是你真正想要的。我是unclear on,你能给TextIO一些实现RawIOBase的东西并给它一个TextIO接口吗?我不知道,在这种情况下唯一真正的建议是用它进行实验。我想知道,有没有办法避免自己实现所有这些东西?已经有了一个类似文件的对象的上下文管理器,已经有一个行缓冲区对于类似文件的对象,已经有了类似文件的对象的迭代器。有什么方法可以使用它们而不必自己实现它们吗?我希望能够只使用im