-
python3教程之python类中super()和__init__()的区别
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/python.html
试听地址 https://www.xin3721.com/eschool/python.html
最近有同学问我关于Python类中的super()和__init__()共同点和不同点的问题, 我今天把它们两个的异同点总结了一下,希望可以帮助遇到同样困惑的同学。
单继承时super()和__init__()实现的功能是类似的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Base( object ): def __init__( self ): print 'Base create' class childA(Base): def __init__( self ): print 'creat A ' , Base.__init__( self ) class childB(Base): def __init__( self ): print 'creat B ' , super (childB, self ).__init__() base = Base() a = childA() b = childB() |
输出结果:
1
2
3
|
Base create creat A Base create creat B Base create |
区别是使用super()继承时不用显式引用基类。
super()只能用于新式类中
把基类改为旧式类,即不继承任何基类
1
2
3
|
class Base(): def __init__( self ): print 'Base create' |
执行时,在初始化b时就会报错:
1
2
|
super(childB, self).__init__() TypeError: must be type , not classobj |
super不是父类,而是继承顺序的下一个类
在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类,而不是父类,类似于这样的功能:
1
2
3
|
def super (class_name, self ): mro = self .__class__.mro() return mro[mro.index(class_name) + 1 ] |
栏目列表
最新更新
python数据库连接池技术总结
python数据库连接池技术总结
成人网站性能提升 20 倍之经验谈 [Python
python动态捕获异常
python 探测网站目录的GUI程序
python实现中文字符繁体和简体中文转换
Python服务器开发 -- 网络基础
python高性能编程方法一
使用python管理Cisco设备
python抓取google搜索结果
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
图解TCP数据报结构以及三次握手(非常详
TCP协议的粘包问题(数据的无边界性)
Excel数据导入到Sql server
SQL Server like 字段
SQL Server中的LEFT、RIGHT函数
sql server 安装出现需要sqlncli.msi文件,错误
SQL Server学习内容(一)
SQLServer执行大脚本文件时,提示“无法执
数据库敏捷版本控制之3个数据库策略
将select 转为json
SQL Server 创建索引(index)
GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及