今日の午後、へのカスタム拡張機能のバグを見つけるために数時間を費やしましたurllib2.Request
。問題は、私が知ったように、super(ExtendedRequest, self)
(urllib2.Request
私はPython 2.5を使用しています)まだ古いスタイルのクラスであり、使用super()
できないため、の使用法でした。
両方の機能を備えた新しいクラスを作成する最も明白な方法は、
class ExtendedRequest(object, urllib2.Request):
def __init__():
super(ExtendedRequest, self).__init__(...)
動作しません。それを呼んで、私はAttributeError: type
によって育てられたままになっていurllib2.Request.__getattr__()
ます。さて、開始してコピーする前に、urllib2.Request
クラス全体を/ usr / lib / pythonから貼り付けて、次のように書き直します。
class Request(object):
誰かがアイデアを持っています、どうすればこれをよりエレガントな方法で達成できますか?(これは、の作業サポートに基づいた新しいスタイルのクラスを持つことです。)urllib2.Request
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