Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要获得完整的python文件接口,我需要实现的文件方法的最小子集是什么?_Python - Fatal编程技术网

要获得完整的python文件接口,我需要实现的文件方法的最小子集是什么?

要获得完整的python文件接口,我需要实现的文件方法的最小子集是什么?,python,Python,Python有一个奇妙的模块,它有一些工具可以让您从一组最小的方法实现完整的dict(例如)。Python中的文件接口是否也有类似的功能?如果不是,您会推荐哪一组最小的方法来实现类文件对象的duck键入 您如何处理那些希望在with语句中使用类似文件的对象的事情,比如您可以使用常规文件,或者谁希望迭代它(就像您可以使用常规文件),或者谁希望能够调用readline或readlines,并让它做一些智能和有用的事情(就像使用常规文件一样)?您必须自己实现它们吗?还是有更好的选择 我知道我可以自己手

Python有一个奇妙的模块,它有一些工具可以让您从一组最小的方法实现完整的
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