飘逸的python - super()只不过是用来避免硬编码的
来源:互联网 发布:hbo直播软件 编辑:程序博客网 时间:2024/04/24 14:05
当在子类需要调用父类的方法时,在python2.2之前,直接用类名调用类的方法,即非绑定的类方法,并把自身对象self作参数传进去。
class A(object): def say(self): print 'I am A'class B(A): def say(self): print 'I am B' A.say(self)b = B()b.say()
输出
I am B
I am A
这样运作挺好,不过有个问题,当父类改了名字时,就要把这些显式调用父类的一个个更正,子类和父类耦合比较高。
于是python2.2后就推出了super()方法来避免硬编码,不用关心父类名叫什么。
使用super()方法,上面的代码可以写成如下。
class B(A): def say(self): print 'I am B' super(B,self).say()
python3.0后,又做了改良,super()方法不用传参数,即上面的那行代码直接super().say()就行了。
需要注意的问题:
- super只能用在新式类中,关于新式类和旧式类我会在后面的博文中提及。
- super在多重继承有问题,如果子类继承多个父类,那么super调用第一个父类的方法
- 不要混用这两种调用父类方法的方案,要么都用非绑定的类方法,要么都用super。不然可能导致没被调用或者被调用多次。
- 飘逸的python - super()只不过是用来避免硬编码的
- 飘逸的python
- 飘逸的python
- 飘逸的python
- 飘逸的python
- 飘逸的python - 中文编码长度有趣的现象
- 飘逸的python - 赛程表算法
- 飘逸的python - 赛程表算法
- 飘逸的python - and_or大法
- 避免硬编码bug
- 避免硬编码
- 飘逸的python - 常见的几个坑
- 飘逸的python - __dict__的妙用
- 飘逸的python - 优雅的执行程序
- 飘逸的python - 彩色你的控制台
- 飘逸的python - 鲜为人知的参数
- 飘逸的python - 装饰器的本质
- 飘逸的python - 编码杂症之在字符串前面加u
- iphone数据存储之-- Core Data的使用(一)
- 【C/C++学习】之十三、虚函数剖析
- XMPP——Smack[2]会话、消息监听、字体表情和聊天窗口控制
- c++ 对象释放
- maven构建使用Spring执行定时任务
- 飘逸的python - super()只不过是用来避免硬编码的
- win7 64位系统 下的 odbc数据源
- Javascript & CSS gotchas in Mobile Web App Development
- Python的50个模块,满足你各种需要
- 2013-07-26(周五)
- 通过GC创建dataguard备库失败一则
- IE文档模式
- Java 环境变量配置
- 糊涂窗口综合症