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

    钻石继承

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

  • 相关阅读:
    maven-eclipse 中index.html页面乱码
    java-Unsupported major.minor version 52.0错误解决
    eclipse引入httpServlet源码
    eclipse恢复默认布局
    eclipse导入Java源码
    bootstrap fileinput api翻译笔记
    js判断display隐藏显示
    php根据路径获取文件名
    js事件处理-整理
    Jms(消息中间件)两种消息传输方式QUEUE和TOPIC比较
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9368046.html
Copyright © 2011-2022 走看看