2013-09-21 5 views
0

У меня есть оболочка python. Python -V - 3.3.2Python doc help (f.seek)

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

seek(...) 

Почему я не получаю информацию об этом BIF? Моя оболочка python правильно?

ответ

3

Инфраструктура I/O была переработана в Python 3, полностью заменив старый файл Python 2 файлом new object hierarchy.

При открытии файла в текстовом режиме, вы получите объект, реализующий интерфейс io.TextIOBase, который оборачивает на io.BufferedIOBase объект, который, в свою очередь, оборачивает что-то implemting интерфейса io.RawIOBase; многие методы на первых двух являются прокси-серверами для методов на объекте, который они обертывают.

Ни классы io.TextIOBase, ни классы io.BufferedIOBase не имеют докстеров на этих различных прокси-методах.

Вы можете добраться до объекта сырого I/O с f.buffer.raw и получить информацию справки о .seek методе там:

help(f.buffer.raw.seek) 

Вы также могли бы сделать дело, что это ошибка; возможно, у прокси-методов должна быть, по крайней мере, указатель, указывающий, что они передают вызов своему базовому объекту, чтобы вы могли найти оригинальный метод. В таких случаях было бы полезно указать указатель на атрибут f.buffer. Не стесняйтесь сделать этот случай на Python issue tracker.

0

Документация, которую вы хотите is here, under io.TextIOBase. По какой-то причине io.TextIOWrapper, экземпляр которого возвращен с open, не выставляет докстроки из своего суперкласса.


Этих классы реализованы в C и как таковые не могут позволить себе роскоши, обеспечиваемую классам питона, имеющей строку документации и подписи автоматически отображаться и распространяющаяся. Скорее всего, никто не хотел этого, чтобы полностью реализовать его для TextIOWrapper.