Сегодня днем я потратил несколько часов, пытаясь найти ошибку в моем собственном расширении до 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