Python中super的用法(新式类与经典类(旧式类)的区别)

3,209次阅读
没有评论

共计 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
正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2017-11-28发表,共计751字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码