我可以绑定 read() 函数以在 python 中键入 'instance' 吗?

Can I bind read() function to type 'instance' in python?

我正在学习 BeautifulSoup 我遇到了这个

from bs4 import BeautifulSoup
import urllib2

url = "https://en.wikipedia.org/wiki/Katy_Perry"
open_url = urllib2.urlopen(url)
read = open_url.read()
print(read)

这将打印页面的 html 代码。但是我们如何在这里使用 read() 呢?它是一个 FileIO 函数,应该与文件对象一起使用。但是这里的变量 "open_url" 不是文件对象。

print(type(open_url))

输出:

<type 'instance'>

显然 "open_url" 不是文件对象,那么是什么使得将 read() 绑定到 "open_url" 成为可能?

如果你同时打印 open_url 你会看到 fp = socket._fileobject ..

<addinfourl at 139707791457312 whose fp = <socket._fileobject object at 0x7f104303bd50>>

所以你看到文件对象实际上是一个 socket._fileobject,你可以用 open_url.fp:

访问它
<socket._fileobject object at 0x7f104303bd50>

如果您删除第一个读取调用,您将看到您可以访问套接字对象并直接调用 .read,这就是您调用 [=17 时发生的情况=] 等..:[=​​18=]

open_url.fp.read()