实例化类时遇到错误:
GoogleCrawler('foods')
TypeError: __new__() takes exactly 4 arguments (2 given)
Process terminated with an exit code of 1
我正在使用一个抽象类(abc),它可能会产生问题。 我称这个班为:
^{pr2}$代码如下:
在BaseCrawler.py在
class BaseCrawler(ABCMeta):
def __init__(self, search_key='', **kwargs):
if type(search_key) == str:
if search_key == '':
search_key = 'Kabe'
self.g_search_key_list = [search_key]
code continues ...
在GoogleCrawler.py包含
from BaseCrawler import BaseCrawler
class GoogleCrawler(BaseCrawler):
def __init__(self, search_key='', **kwargs):
super().__init__(search_key, **kwargs)
# google search specific url parameters
self.search_url_prefix = kwargs.get('search_url_prefix', 'https://www.google.com.sg/search?q=')
self.search_url_postfix = kwargs.get('search_url_postfix','&source=lnms&tbm=isch&sa=X&ei=0eZEVbj3IJG5uATalICQAQ&ved=0CAcQ_AUoAQ&biw=939&bih=591')
# show more options
# options : 'id','class'
self.show_more_find_type = kwargs.get('show_more_find_type', 'id')
self.show_more_find_value = kwargs.get('show_more_find_value', 'smb')
code continues ...
除了Daniel Roseman建议的(将
__metaclass__ = ABCMeta
添加到BaseCrawler
)之外,还需要在GoogleCrawler
中添加对super()
的调用的参数,因为在python2中,它总是需要至少一个参数(本例中需要两个)。在对于python2.x,您需要将元类指定为类的一个特殊属性。
相关问题 更多 >
编程相关推荐