【发布时间】:2015-02-26 21:24:30
【问题描述】:
我正在尝试从 Python 的“请求”库中创建 Response 的子类。当我使用 Python 2.7.6 和 Requests 2.5.3 执行以下操作时:
import requests
class Page(requests.Response):
# A Page is a Response that reported itself to be OK (HTTP "200").
def __init__(self, url):
requests.Response.__init__(self)
self = requests.get(url)
assert self.status_code is 200
print "Status code according to __init__: " + str(self.status_code)
p = Page("http://www.google.com/")
print "Status code according to instance: " + str(p.status_code)
我得到这个输出:
Status code according to __init__: 200
Status code according to instance: None
这让我很惊讶。我认为这两个调用处理的是同一实例的相同属性,因此希望它们给出相同的输出。
确实,当从__init__ 调用时,所有实例的属性都显示为已填充(即不仅是self.status_code,还有self.text 等)。然而,如果我从实例中调用相同的属性(例如p.text),它们会产生None 或类似的东西,就好像它们没有被初始化一样。
为什么__init__ 看到的内容与实例看到的内容之间存在这种差异?
【问题讨论】:
-
你正在重新定义
self。绝不是一个好主意。 -
@BryanOakley,同意!
标签: python python-2.7 web-scraping python-requests