Python下的多继承
来源:互联网 发布:杭州半径圈网络创始人 编辑:程序博客网 时间:2024/06/09 16:47
(本文不是告诉你怎么样使用Python多继承的)
学过C++和java的同学都知道,C++中的多继承让人很混乱,而java中使用接口实现多继承让人感觉踏实多了。一直听说Python是一门很优美的语言,但是我在学习的过程中遇到了不少坑,其中之一就是Python的多继承。Python的多继承会很容易导致某些父类的__init__方法被调用多次的情况,而且也不能在在子类的__init__方法中分别同时调用不同的基类的__init__方法,如下代码所示:
# coding: utf-8__author__ = 'liuzhenhua'class Parent1(object): def __init__(self, x): self.x = x class Parent2(object): def __init__(self, a, b): self.a = a self.b = b class SubClass(Parent1, Parent2): def __init__(self, x, a, b): # 我想要使用SubClass的__init__方法传进来的三个参数来分别构造Parent1的__init__和Parent2的__init__, # 但是下面的代码做不到,使用super不能指定具体调用哪个父类的__init__方法(也不能指定调用哪个父类的其他方法) super(SubClass, self).__init__(x, a, b) # 可以使用下面两行代码来指定分别调用两个父类的__init__方法,但是这时会造成其他问题,这里就不讨论了 # Parent1.__init__(self, x) # Parent2.__init__(self, a, b)
另外,就我个人而言,我特别不喜欢多继承,在学Python的时候我特别怀念Java和C#的接口。
多继承虽然比较灵活,功底好的coder可以发挥出多继承的优势,但是很多代码不是一个人写的,另外往往写代码和维护代码的人不是同一个人,其他人不知道你的类的继承顺序就会引发很多问题,打乱你的类的继承结构,从而可能导致有些间接父类没有被初始化,或者被初始化多次。所以我认为对于Python的多继承,我们应该把他当做单继承来用,其他的父类就退化成java中的接口,使用接口的功能,这样一来就又变成可控的java的感觉了。
下面的代码是将Python的多继承用做接口的例子,将SubClass的第二个父类当做一个接口,在SubClass里面重写接口中方法:
# coding: utf-8__author__ = 'liuzhenhua'class Parent1(object): def __init__(self, x): self.x = xclass Interface1(object): def interface_method(self): passclass SubClass(Parent1, Interface1): def __init__(self, x): super(SubClass, self).__init__(x) def interface_method(self): print "这是实现自接口类的方法" print self.xclass Main(object): def __init__(self, interface): self.interface = interface def invoke(self): if self.interface is not None and isinstance(self.interface, Interface1): self.interface.interface_method() else: print '参数错误为None或者参数类型错误'sub_class = SubClass(10)main = Main(sub_class)main.invoke()
0 0
- Python下的多继承
- Python的多继承
- Python的多继承
- Python 类的多继承
- python的继承多态
- C++下的多继承
- 继承object对象对python多继承的影响
- Python继承与多继承
- python的多重继承与多态
- python类的继承与多态
- python 的继承与多态
- python的继承和多态
- 一个多继承的Python实例
- Python之类的继承和多态
- python 的继承和多态
- Python类的继承
- Python的继承
- python类的继承
- EOJ1646 bfs
- 诡异的Linux磁盘空间被占用问题。
- 1780
- OC语法<3.3> OC中特有的语法:Protocol协议
- 记录我C#的学习过程
- Python下的多继承
- EOJ1839
- Java 工具类--CommonUtils
- java中树节点的应用
- 菜鸟学习Git技术系列--No.1
- telnet 发送邮件
- eoj1857
- [Code] 收集各种语言对图片的处理算法实现 图片模糊
- hihocoder#1015之KMP算法