最小例子:
import scrapy
class MyItem(scrapy.Item):
def __init__(self, key, *args, **kwargs):
super(MyItem, self).__init__(*args, **kwargs)
它完全由Python 2.7,3.3,3.4和3.5解释,但 Python 3.6.0引发了TypeError
异常:
TypeError: __class__ set to <class '__main__.MyItem'> defining 'MyItem' as <class '__main__.MyItem'>
如果以相同的方式覆盖任何其他方法,则Python 3.6.0引发相同的异常。为什么呢?
但是没有调用super()
的类通常由Python 3.6.0解释:
import scrapy
class MyItem(scrapy.Item):
pass
class MyItem2(scrapy.Item):
def new_method(self):
pass
class MyItem3(scrapy.Item):
def __init__(self, *args, **kwargs):
pass
我使用Scrapy 1.3,使用元类的scrapy.Item实现是here。