1

我有 python 外壳。Python -V 是 3.3.2

>>>f = open('data.txt', 'r')
>>>dir(f)
[..."it's ok"...]
>>>help(f.seek)
Help on built-in function seek:

seek(...)

为什么我没有得到有关此 BIF 的信息?我的 python shell 正确吗?

4

2 回答 2

4

I/O 基础结构在 Python 3 中进行了彻底改革,用新的对象层次结构完全替换了旧的 Python 2 文件对象。

当您以文本模式打开文件时,您会得到一个实现io.TextIOBase接口的对象,该对象包装了一个io.BufferedIOBase对象,该对象又包装了一些实现io.RawIOBase接口的东西;前两个上的许多方法只是它们包装的对象上的方法的代理。

io.TextIOBase和类都io.BufferedIOBase没有关于这些不同代理方法的文档字符串。

您可以使用以下方法访问原始 I/O 对象f.buffer.raw并获取有关该.seek方法的帮助信息:

help(f.buffer.raw.seek)

你也可以证明这是一个错误;可以说,代理方法至少应该有一个文档字符串,说明它们将调用传递给其底层对象,以便您可以找到原始方法。在这种情况下,指向f.buffer属性的指针会很有帮助。随意在Python 问题跟踪器上解决这个问题。

于 2013-09-21T12:00:48.723 回答
1

您想要的文档在这里,在 io.TextIOBase 下。出于某种原因io.TextIOWrapper,从 中返回的实例open不会公开其超类中的文档字符串。


这些类是用 C 实现的,因此没有 Python 类能够自动显示和传播文档字符串和签名的奢侈。没有人想要它来为 TextIOWrapper 完全实现它。

于 2013-09-21T11:59:23.953 回答