zoukankan      html  css  js  c++  java
  • python中的新式类与旧式类

    在python2中,有新式类与旧式类的区别;

    首先创建一个类:

     class Sb(object):

      pass

    如果创建时继承自object,说明这是一个新式类,不写object,说明是一个旧式类;

    那么新式类与旧式类有什么区别呢?

    区别就在于查找继承的属性时所遵循的算法不同。

    举例说明:

     1 class A:
     2     def __init__(self):
     3         age = 10
     4  
     5 class B(A):
     6     pass
     7 
     8 class C(A):
     9     pass
    10  
    11 class D(B,C):
    12     pass    

    那么这几个类的关系如图:

    使用D的属性:

    d = D()
    d.age

    此时要使用这个属性,就要到D的父类中查找,先查找完B,接下来是往上继续查找B的父类A呢,还是查找过C再找A呢?

    新式类与旧式类的区别就在这里。

    新式类:找过B,接着找C,C还没有,再去找它们的父类,使用的是广度优先的算法;

    旧式类:找过B,接着找B的父类A,如果没有,再找C,使用的是深度优先的算法;

    在python3中都是新式类,也就是说查找继承的属性时按照广度优先的算法。

  • 相关阅读:
    For in
    For each.....in
    正则表达式
    DOM&&BOM
    字幕滚动
    web API种类
    应用程序接口
    for each in
    object constructor
    编程语言历史
  • 原文地址:https://www.cnblogs.com/chaofan-/p/8479827.html
Copyright © 2011-2022 走看看