python 继承多重继承
2017-08-17 00:15
232 查看
十七、python 继承多重继承
继承
1、根据已有的类生产新的类
继承的目的:代码重用;多态
2、多重继承
菱形继承的问题
经典类:深度优先
新式类:广度优先
Inspect.getmro(class)
---------------------------------------------------
如下体现新式类的广度优先:即寻找顺序是: 类B---> 类C ---->
类A。如下代码输出:cc
class
A(object):
def
a(self):
print
'aa'
class B(A):
pass
# def a(self):
# print 'bb'
class C(A):
def
a(self):
print
'cc'
class E(B,C):
pass
e = E()
e.a()
如下体现经典类的深度优先:即寻找顺序是: 类B---> 类A ---->
类C。如下代码输出:aa
class
A():
def
a(self):
print
'aa'
class B(A):
pass
# def a(self):
# print 'bb'
class C(A):
def
a(self):
print
'cc'
class E(B,C):
pass
e = E()
e.a()
---------------------------------------------------
------------------------------------------------
class A(object):
def __init__(self):
print 'in A'
class B(A):
pass
b = B()
class C(A):
print 'in c'
c = C()
class D(A):
def __init__(self):
A.__init__(self)
print 'in d'
d = D()
#----------------------------------------
class E:
print 'in E0000'
def __init__(self):
print 'in E'
class F:
print 'in F0000'
def __init__(self):
print 'in F'
class G(F,E): #交换两个被继承类的位置,你在看看??当两个类中有相同方法时又是调用那个??
print 'in G'
g = G()
print '---------------------------'
class M(A):
def __init__(self):
#A.__init__(self)
super(M, self).__init__()
print 'in M'
class N(A):
def __init__(self):
#A.__init__(self)
super(N,self).__init__()
print 'in N'
class P(M,N): #发现A被初始化两次??有问题,怎么解决,用super调用
def __init__(self):
#M.__init__(self)
#N.__init__(self)
super(P,self).__init__() #使用super关键字,A就只被初始化一次。super关键字是新式类中有的,建议使用
print 'in P'
p = P()
#使用交互式
import inspect
inspect.getmro(P)
#(<class '__main__.P'>, <class '__main__.M'>, <class '__main__.N'>, <class '__main__.A'>, <type 'object'>)
#把A改成经典类,然后再把super注释,因为super是新式类的
inspect.getmro(P)
#(<class __main__.P at 0x00000000026CCA68>, <class __main__.M at 0x00000000026CCD08>, <class __main__.A at 0x00000000026CCDC8>, <class __main__.N at 0x00000000026CCA08>)
---------------------------------------------
注:
super(子类名字,self):self放在后面,需要和属性方法分开
继承
1、根据已有的类生产新的类
继承的目的:代码重用;多态
2、多重继承
菱形继承的问题
经典类:深度优先
新式类:广度优先
Inspect.getmro(class)
---------------------------------------------------
如下体现新式类的广度优先:即寻找顺序是: 类B---> 类C ---->
类A。如下代码输出:cc
class
A(object):
def
a(self):
'aa'
class B(A):
pass
# def a(self):
# print 'bb'
class C(A):
def
a(self):
'cc'
class E(B,C):
pass
e = E()
e.a()
如下体现经典类的深度优先:即寻找顺序是: 类B---> 类A ---->
类C。如下代码输出:aa
class
A():
def
a(self):
'aa'
class B(A):
pass
# def a(self):
# print 'bb'
class C(A):
def
a(self):
'cc'
class E(B,C):
pass
e = E()
e.a()
---------------------------------------------------
------------------------------------------------
class A(object):
def __init__(self):
print 'in A'
class B(A):
pass
b = B()
class C(A):
print 'in c'
c = C()
class D(A):
def __init__(self):
A.__init__(self)
print 'in d'
d = D()
#----------------------------------------
class E:
print 'in E0000'
def __init__(self):
print 'in E'
class F:
print 'in F0000'
def __init__(self):
print 'in F'
class G(F,E): #交换两个被继承类的位置,你在看看??当两个类中有相同方法时又是调用那个??
print 'in G'
g = G()
print '---------------------------'
class M(A):
def __init__(self):
#A.__init__(self)
super(M, self).__init__()
print 'in M'
class N(A):
def __init__(self):
#A.__init__(self)
super(N,self).__init__()
print 'in N'
class P(M,N): #发现A被初始化两次??有问题,怎么解决,用super调用
def __init__(self):
#M.__init__(self)
#N.__init__(self)
super(P,self).__init__() #使用super关键字,A就只被初始化一次。super关键字是新式类中有的,建议使用
print 'in P'
p = P()
#使用交互式
import inspect
inspect.getmro(P)
#(<class '__main__.P'>, <class '__main__.M'>, <class '__main__.N'>, <class '__main__.A'>, <type 'object'>)
#把A改成经典类,然后再把super注释,因为super是新式类的
inspect.getmro(P)
#(<class __main__.P at 0x00000000026CCA68>, <class __main__.M at 0x00000000026CCD08>, <class __main__.A at 0x00000000026CCDC8>, <class __main__.N at 0x00000000026CCA08>)
---------------------------------------------
注:
super(子类名字,self):self放在后面,需要和属性方法分开
相关文章推荐
- python多重继承
- 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
- Python类的多重继承问题深入分析
- Python3.2官方文档翻译-多重继承和私有变量
- Python多重继承的方法解析执行顺序实例分析
- python多重继承C3算法
- 7 python 动态绑定,@property的使用__slots_限制class的属性以及多重继承
- Python面向对象——多重继承
- Python面向对象——多重继承大揭秘
- Python多重继承的异构构造器
- python3中多重继承的问题
- python学习——多重继承
- Python多重继承的异构构造器
- python进阶15:继承、多态和多重继承
- Python多重继承说明及应用
- python多重继承:
- python多重继承实例
- Python学习27:继承以及多重继承方式,MRO(方法解释顺序)
- python多重继承新算法C3介绍
- python支持多重继承