2017-06-19 85 views
0

我正在研究scrapy框架。無法訪問子實例中的父實例varibale

我有一些共同的屬性,我想要所有的蜘蛛,所以我做了一個BaseSpider。

BaseSpider

import scrapy 
from src.LoggerFactory import get_logger 
import ConfigParser 
from redis import Redis 


class BaseSpider(scrapy.Spider): 
    logger = get_logger() 

    def __init__(self, *args, **kwargs): 
     super(scrapy.Spider, self).__init__(*args, **kwargs) 
     config = ConfigParser.RawConfigParser() 
     config.read('../../config.cfg') 
     self.config = config 
     self.redis = Redis(host=config.get('redis', 'host'), port=config.get('redis', 'port')) 

    def parse(self, response): 
     pass 

而且我EbaySpider如下

EbaySpider

import scrapy 
import json 
from scrapper.items import Product 
from BaseSpider import BaseSpider 


class EbaySpider(BaseSpider): 
    name = "ebay" 
    allowed_domains = ["ebay.com"] 

    def __init__(self, *args, **kwargs): 
     super(BaseSpider, self).__init__(*args, **kwargs) 
     print self.redis # Throws AttributeError: 'EbaySpider' object has no attribute 'redis' 
     exit() 

奇怪的是我仍然可以訪問scrapy.Spider properts我EbaySpider雖然它不是從012繼承。

此外,如果有任何scrapy的方式來擴展蜘蛛,請建議,因爲我無法在他們的文件中找到它。

感謝

回答

4

super用法是錯誤的。

一個典型的超調用如下:

class C(B): 
    def method(self, arg): 
     super(C, self).method(arg) 

As per official 2.7 docs

哪裏是你的模樣:

class C(B): 
    def method(self, arg): 
     super(B, self).method(arg) 
      ^
+0

哦,我的壞了!新的蟒蛇大聲笑..謝謝兄弟 –