Python中super的用法实例

yipeiwu_com6年前Python基础

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。

普通继承

复制代码 代码如下:

class FooParent(object): 
    def __init__(self): 
        self.parent = 'I\'m the parent.' 
        print 'Parent' 
     
    def bar(self,message): 
        print message, 'from Parent' 
         
class FooChild(FooParent): 
    def __init__(self): 
        FooParent.__init__(self) 
        print 'Child' 
         
    def bar(self,message): 
        FooParent.bar(self,message) 
        print 'Child bar function.' 
        print self.parent 
         
if __name__=='__main__': 
    fooChild = FooChild() 
    fooChild.bar('HelloWorld') 

super继承

复制代码 代码如下:

class FooParent(object): 
    def __init__(self): 
        self.parent = 'I\'m the parent.' 
        print 'Parent' 
     
    def bar(self,message): 
        print message,'from Parent' 
 
class FooChild(FooParent): 
    def __init__(self): 
        super(FooChild,self).__init__() 
        print 'Child' 
         
    def bar(self,message): 
        super(FooChild, self).bar(message) 
        print 'Child bar fuction' 
        print self.parent 
 
if __name__ == '__main__': 
    fooChild = FooChild() 
    fooChild.bar('HelloWorld') 

程序运行结果相同,为:

复制代码 代码如下:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

从运行结果上看,普通继承和super继承是一样的。但是其实它们的内部运行机制不一样,这一点在多重继承时体现得很明显。在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。
注意super继承只能用于新式类,用于经典类时就会报错。
新式类:必须有继承的类,如果没什么想继承的,那就继承object
经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj』

关于super用法的详细研究可参考「/post/66912.htm

相关文章

Windows10下Tensorflow2.0 安装及环境配置教程(图文)

Windows10下Tensorflow2.0 安装及环境配置教程(图文)

下载安装Anaconda 下载地址如下,根据所需版本下载 安装过程暂略(下次在安装时添加) 下载安装Pycharm 下载安装Pycharm,下载对应使用版本即可 如果你是在校学...

使用Python在Windows下获取USB PID&VID的方法

在Linux系统下获取USB PID&VID是件十分容易的事情,只需要"lsusb"命令就可以了。 不过,对于Windows,就没有那么容易了。 之前,有尝试过通过注册表来获得目前连接d...

python 获取文件列表(或是目录例表)

import os os.os.listdir(path) 然后再一个一个的分析文件和目录 通过和dos命令dir的巧妙结合,可以很轻松的做到这点,看示例 获取目录下所有文件方法 cmd...

Python中的单行、多行、中文注释方法

Python中的单行、多行、中文注释方法

一、python单行注释符号(#) python中单行注释采用 #开头 示例:#this is a comment 二、批量、多行注释符号 多行注释是用三引号”' ”'包含的,例如:...

python list语法学习(带例子)

创建:list = [5,7,9]取值和改值:list[1] = list[1] * 5列表尾插入:list.append(4)去掉第0个值并返回第0个值的数值:list.pop(0)去...