Python----面向对象--继承的实现原理

一、面向对象中的类有两种,新式类和经典类

1、在python2中,经典类是没有继承object的类,以及它的之类都称之为经典类

示例代码如下

class Foo:

  pass

class Bar(Foo):

  pass

2、在python2中,新式类是继承object的类,以及它的子类都称之为新式类

示例代码如下:

class Foo(object):

  pass

class Bar(Foo):

  pass

3、在python3中,只有一种面向对象编程的类,那就是新式类,一个类没有继承object类,默认就继承object

示例代码如下:

1 class Foo:
2     pass
3 
4 
5 print(Foo.__bases__)
6 
7 结果如下:
8 
9 (<class 'object'>,)

二、多父类继承中属性查找顺序

经典类继承顺序是按照深度优先

新式类继承顺序是按照广度优先,下面已python3中的一段代码验证新式类的广度优先,示例代码如下:

 1 class A(object):
 2     def test(self):
 3         print('from A')
 4 
 5 
 6 class B(A):
 7     def test(self):
 8         print('from B')
 9 
10 
11 class C(A):
12     def test(self):
13         print('from C')
14 
15 
16 class D(B):
17     def test(self):
18         print('from D')
19 
20 
21 class E(C):
22     def test(self):
23         print('from E')
24 
25 
26 class F(D, E):
27     def test(self):
28         print('from F')
29     pass
30 
31 
32 f1 = F()
33 f1.test()

执行所得结果为:from F

把F类下的test函数注释,执行结果为:from D

把D类下的test函数注释,执行结果为:from B

把B类下的test函数注释,执行结果为:from E

把E类下的test函数注释,执行结果为:from C

把C类下的test函数注释,执行结果为:from A

所以查找顺序为F---D----B-----E-----C------A

与Print(F.mro())的结果[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>] 一致

只有新式类才有mro方法

 

转载于:https://www.cnblogs.com/xudachen/p/8597501.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值