如何在Python中从普通类调用spider类?

如何在Python中从普通类调用spider类?,python,scrapy,web-crawler,scrapy-spider,Python,Scrapy,Web Crawler,Scrapy Spider,我有以下问题: 我想调用另一个类中的蜘蛛,就像RubyonRails中的乔布斯一样。例如: class Foo: MySpider() 然后,调用Foo()来执行我的spider。我不知道我的观点是否足够清楚,但我将感谢您的帮助:)您可以用几种方法来实现这一点(即使使用函数式编程),但我将向您展示几个: 1。构造函数 您可以在Foo的构造函数中实例化(我认为这就是您所说的“调用”)MySpider: class MySpider(object): def __init__(sel

我有以下问题:

我想调用另一个类中的蜘蛛,就像RubyonRails中的乔布斯一样。例如:

class Foo:
  MySpider()

然后,调用Foo()来执行我的spider。我不知道我的观点是否足够清楚,但我将感谢您的帮助:)

您可以用几种方法来实现这一点(即使使用函数式编程),但我将向您展示几个:

1。构造函数

您可以在
Foo
的构造函数中实例化(我认为这就是您所说的“调用”)
MySpider

class MySpider(object):

    def __init__(self):
        super().__init__()
        print('In MySpider __init__.')


class Foo(object):

    def __init__(self):
        super().__init__()
        print('In Foo __init__.')
        MySpider()


Foo()

'''
prints:

In Foo __init__.
In MySpider __init__.
'''
但是请注意,需要创建一个新的
Foo
实例,以便实例化并保存对
MySpider
的引用。如果需要保留引用,只需将self.my_spider=MySpider()放在
\uuu init\uu


2。添加呼叫

除了
\uuuu init\uuuu
方法外,您还可以添加
\uuu调用\uuuu
方法。这实际上是允许直接调用实例化的对象。如果您有它
返回self
,则允许调用链发生:

class Foo(object):

    def __call__(self, *args, **kwargs):
        print('In Foo __call__.')
        MySpider()
        return self


Foo()()()

'''
prints:

In Foo __init__.
In MySpider __init__.
In Foo __call__.
In MySpider __init__.
'''

您希望在所有
Foo
实例中共享一个
MySpider
实例,还是每个
Foo
实例都应该有自己的
MySpider
实例?我认为每个Foo实例都应该有自己的MySpider实例。当我调用Foo时,它应该调用MySpider,如果我再次调用它,应该调用另一个MySpider。我尝试这样调用,但从Scrapy调用spider我认为与调用普通类不同。。。