middleware中的super()构造方法问题
来源:8-5 通过downloadmiddleware随机更换user-agent - 2
Liangruuu
2018-11-26
class RandomUserAgentMiddlware(object): #随机更换user-agent def __init__(self, crawler): super(RandomUserAgentMiddlware, self).__init__() self.ua = UserAgent() self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random") @classmethod def from_crawler(cls, crawler): return cls(crawler) def process_request(self, request, spider): def get_ua(): return getattr(self.ua, self.ua_type) request.headers.setdefault('User-Agent', get_ua())
老师,关于__init__里面的调用父类构造方法这行能不能去掉,因为我看scrapy源码里也都是没有使用过super(),我们这里调用super有什么意义吗,而且middleware的父类是什么,我好像没在他源码里看到过
写回答
1回答
-
bobby
2018-11-26
可以去掉, 如果你知道了super的定义之后其实你应该知道super方法是按照mro的算法去查找方法的, 在django的xadmin中出现过虽然继承的是object,但是xadmin会内部调整继承顺序,导致有些父类中的方法子类可以重用。所以为了保险起见这样调用不会有副作用,不过你这里不调用也可以
00
相似问题