【发布时间】:2011-01-17 01:03:09
【问题描述】:
今天下午,我花了几个小时试图在 urllib2.Request 的自定义扩展中找到一个错误。正如我发现的那样,问题是super(ExtendedRequest, self) 的使用,因为urllib2.Request (我在Python 2.5 上)仍然是一个旧样式类,其中super() 的使用是不可能的。
创建具有这两种功能的新类的最明显方法,
class ExtendedRequest(object, urllib2.Request):
def __init__():
super(ExtendedRequest, self).__init__(...)
不起作用。调用它,我留下了由urllib2.Request.__getattr__() 提出的AttributeError: type。现在,在我开始复制之前,从 /usr/lib/python 复制整个 urllib2.Request 类,以便将其重写为
class Request(object):
有人有什么想法,我怎样才能以更优雅的方式实现这一目标? (this 有一个基于 urllib2.Request 的 new-style 类,并为 super() 提供工作支持。)
编辑:顺便说一句:提到的AttributeError:
>>> class ExtendedRequest(object, urllib2.Request):
... def __init__(self):
... super(ExtendedRequest, self).__init__('http://stackoverflow.com')
...
>>> ABC = ExtendedRequest ()
>>> d = urllib2.urlopen(ABC)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "/usr/lib/python2.5/urllib2.py", line 373, in open
protocol = req.get_type()
File "/usr/lib/python2.5/urllib2.py", line 241, in get_type
if self.type is None:
File "/usr/lib/python2.5/urllib2.py", line 218, in __getattr__
raise AttributeError, attr
AttributeError: type
【问题讨论】:
标签: python request urllib2 super new-style-class