python调用类方法以减少重复

python调用类方法以减少重复,python,Python,我有两个刮项目有许多代码重复 project1.py将抓取整个链接 project2.py将抓取几个链接以进行测试 我想修改project2.py以减少重复代码 以下是我的代码结构: 项目1.py class MySpider(Spider): name = "get_all" start_urls = [""] def __init__(self,**kwargs): dispatcher.connect(self.spider_closed, si

我有两个刮项目有许多代码重复 project1.py将抓取整个链接 project2.py将抓取几个链接以进行测试

我想修改project2.py以减少重复代码

以下是我的代码结构:

项目1.py

class MySpider(Spider):

    name = "get_all"
    start_urls = [""]

    def __init__(self,**kwargs):
        dispatcher.connect(self.spider_closed, signals.spider_closed)
        super(MySpider, self).__init__()

    def parse(self, response):
        ...
        yield Request(url=url,callback=self.status_info)

    def status_info(self, response):
        ... 
        yield Request(url=url,  callback=self.project_info)

    def project_info(self, response):
        ...
        yield Request(url=rewards,callback=self.comment_info)

    @classmethod
    def comment_info(cls, response):
        yield item 

    @classmethod
    def spider_closed(cls, spider):
        ...
项目2.py

class MySpider2(Spider):   
    name = "get_uni"
    start_urls = [""]

    def __init__(self,**kwargs):
        dispatcher.connect(self.spider_closed, signals.spider_closed)
        super(MySpider2, self).__init__()

    def parse(self, response):
        ... 
        yield Request(url=url, callback=self.project_info)

    def project_info(self, response):
        yield Request(url=rewards,callback=self.comment_info)

    @classmethod
    def comment_info(cls, response):
        ...
        yield item

    @classmethod
    def spider_closed(cls, spider):
        ... 
我将项目2编辑为:

from myproject.spiders.project1 import MySpider

class MySpider2(Spider):   
    name = "get_uni"
    start_urls = [""]

    def __init__(self,**kwargs):
        dispatcher.connect(MySpider.spider_closed, signals.spider_closed)
        super(MySpider2, self).__init__()

    def parse(self, response):
        ... 
        yield Request(url=url, callback=MySpider.project_info)
但是得到错误:

File "/Users/obe/env/lib/python2.7/site-packages/twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
TypeError: unbound method project_info() must be called with MySpider instance as first argument (got TextResponse instance instead)
哪里错了?
请引导我,谢谢你

我想你需要这样的东西

from myproject.spiders.project1 import MySpider

class MySpider2(Spider):   
    name = "get_uni"
    start_urls = [""]
    my_spider = MySpider()

    def __init__(self,**kwargs):
        dispatcher.connect(my_spider.spider_closed, signals.spider_closed)
        super(MySpider2, self).__init__()

    def parse(self, response):
        ... 
        yield Request(url=url, callback=my_spider.project_info)
此错误背后的原因是,当您使用名为self的参数调用方法时,self引用的是类的实例,而不是类本身。这就是为什么不能静态调用该方法

嗯,project_info是一种实例方法。你确定你不是想调用commet_info,即yield Requesturl=url,callback=MySpider.comment_info。这应该行得通。我把我的蜘蛛(MySpider=MySpider)放下课了。它可以行得通!这个方法叫什么??