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

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

Python admin 2年前 (2017-11-28) 930次浏览 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)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

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