Python中多继承与super()用法
来源:互联网 发布:51单片机郭天祥 编辑:程序博客网 时间:2024/05/18 02:54
Python类分为两种,一种叫经典类,一种叫新式类。两种都支持多继承。
考虑一种情形,B继承于A,C继承于A和B, 但C需要调用父类的init()函数时,前者会导致父类A的init()函数被调用2次,这是不希望看到的。而且子类要显式地指定父类,不符合DRY原则。
# 经典类class A(): def __init__(self): print 'A'class B(A): def __init__(self): A.__init__(self) print 'B'class C(B, A): def __init__(self): A.__init__(self) B.__init__(self) print 'C'
采用新式类,要求最顶层的父类一定要继承于object
,这样就可以利用super()函数来调用父类的init()等函数,每个父类都执行且执行一次,并不会出现重复调用的情况。而且在子类的实现中,不用到处写出所有的父类名字,符合DRY原则。
# 新式类class A(object): def __init__(self): print 'A'class B(A): def __init__(self): super(B, self).__init__() print 'B'class C(B, A): def __init__(self): super(C, self).__init__() print 'C'
采用super()方式时,会自动找到第一个多继承中的第一个父类,但是如果还想强制调用其他父类的init()函数或两个父类的同名函数时,就要用老办法了。
class Person(object): name = "" sex = "" def __init__(self, name, sex='U'): print 'Person' self.name=name self.sex=sexclass Consumer(object): def __init__(self): print 'Consumer' class Student(Person, Consumer): def __init__(self, score,name): print Student.__bases__ super(Student, self).__init__(name, sex='F') Consumer.__init__(self) self.score=scores1 = Student(90, 'abc')print s1.name, s1.score, s1.sex
0 0
- Python中多继承与super()用法
- Python 中的继承之Super用法
- Java中多继承下的super()用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- Python中super的用法
- python中super函数用法
- python中super用法研究
- Python中super的用法
- java继承中super关键字的用法
- Python进阶-继承中的MRO与super
- python继承中super的问题
- Java中覆盖、继承、重载和多态的详细解说与this和super的用法
- Jenkins 持续集成构建
- OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(上)
- 从一个logger引发的lib和dll探讨
- java实现导出多sheet的excel小实例
- 12.1 Swing与MVC设计模式
- Python中多继承与super()用法
- java反射
- #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif 语句解释
- SELinux policy问题解决思路总结
- 12.2 布局管理器简介
- Linux 用户和用户组
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- 构造方法/构造器
- Xshell xftp 代理设置