This page looks best with JavaScript enabled

Python新旧类的方法查找区别

 ·  ☕ 1 min read

Python 中现在存在两种类的定义方式:

  • 1 旧式
1
2
3
4
class A():

    def foo(self):
        print('A foo')
  • 2 新式( Python 3 默认的方式)
1
2
3
4
class A(object):

    def foo(self):
        print('A foo')

今天在其他文章里看到说两者的区别: 查找方法的算法不一样。
旧式类是 深度优先, 新式类是 广度优先

  • 深度优先: 和树的 先序遍历 类似
  • 广度优先:和树的 层序遍历 类似

深度优先: D -> B -> A -> C
广度优先: D -> B -> C -> A

两个简单的例子看区别:

Python 2.x 环境下

  • 旧式类
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class A():
    def foo(self):
        print('a foo')

class B(A):
    pass

class C(A):
    def foo(self):
        print('c foo')

class D(B,C):
    pass

D().foo()

# 输出: a foo
  • 新式类
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class A(object):
    def foo(self):
        print('a foo')

class B(A):
    pass

class C(A):
    def foo(self):
        print('c foo')

class D(B,C):
    pass

D().foo()

# 输出: c foo
Support the author with
alipay QR Code
wechat QR Code

Yang
WRITTEN BY
Yang
Developer