zoukankan      html  css  js  c++  java
  • Python中新式类和经典类的区别,钻石继承

    1)首先,写法不一样:

    1 class A:
    2     pass
    3  
    4 class B(object):

    2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索

    3)新式类更符合OOP编程思想,统一了python中的类型机制。

     

    Python 2.x中默认都是经典类,只有显式继承了object才是新式类

    Python 3.x中默认都是新式类,不必显式的继承object

    --新式类对象可以直接通过__class__属性获取自身类型:type

    --继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

    --新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中

    --新式类增加了__getattribute__方法

     1 class A():
     2     def __init__(self):
     3         pass
     4     def save(self):
     5         print "This is from A"
     6 class B(A):
     7     def __init__(self):
     8         pass
     9 class C(A):
    10     def __init__(self):
    11         pass
    12     def save(self):
    13         print  "This is from C"
    14 class D(B,C):
    15     def __init__(self):
    16         pass
    17 fun =  D()
    18 fun.save()
    19 
    20 经典类的答案: This is from A
    21 新式类的答案: This is from C

    钻石继承

    如果子类继承自两个单独的超类,而那两个超类又继承自同一个公共基类,那么就构成了钻石继承体系。

  • 相关阅读:
    POJ 1300 Open Door
    POJ 2230 Watchcow
    codevs 1028 花店橱窗布置
    codevs 1021 玛丽卡
    codevs 1519 过路费
    codevs 3287 货车运输
    codevs 3305 水果姐逛水果街二
    codevs 1036 商务旅行
    codevs 4605 LCA
    POJ 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9368046.html
Copyright © 2011-2022 走看看