共计 751 个字符,预计需要花费 2 分钟才能阅读完成。
在python2.2版本之前,直接调用超类的方法,后来改成通过super来调用,原因是为了解决多重继承中的钻石形状问题。Python里的super只能用在新式类中,不能用于以前的经典类,如果基类是经典类则会出现这个错误。解决的方法是FatherClass只要有一个超类是Object就OK了。当时我就很蒙蔽,于是再次寻找新式类与经典类的区别。经过自己敲代码终于有所悟。
首先区分新式类与经典类的区别,经典类即在没有父类的情况下直接写成class A,而新式类则必须写成class A(object),其中(object)有否是区别新式类与经典类的关键,而super执行时必须为新式类。如果你缺少了(object),则class A就变成了经典类而无法初始化super,从而会产生报错TypeError: super() argument 1 must be type, not classobj。接下来是两段简单的代码理解新式类与经典类的区别。同时你可以把代码2中的第一条语句class A(object):改成class A:再运行下看看会不会报错。我想这能更好的帮助你理解新式类与经典类的区别同时更好的使用super
from UserDict import DictMixin,UserDict
class DoppelDict(UserDict,object):
def __setitem__(self, key, value):
super(DoppelDict,self).__setitem__(key,[value]*2)
#self.data[key]=[value]*2
if __name__ == '__main__':
print type(DoppelDict)
a = DoppelDict(one=1)
a['two']=2
print a
正文完
请博主喝杯咖啡吧!