• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

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

Python admin 3年前 (2017-11-28) 1281次浏览 0个评论 扫描二维码

在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


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Python中super的用法(新式类与经典类(旧式类)的区别)
喜欢 (0)
[@lc@]
分享 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!