zoukankan      html  css  js  c++  java
  • Python---面向对象编程-2

    .经典类

    .新式类

    .深度优先

    .广度优先

    首先经典类是Python 2.x中的一个名词,Python 2.x默认是经典类,只有显示继承了object才是新式类;在Python3.x中默认都是新式类。

    经典类详解

      object是“所有类之母”。而在Python2.x当中要写上object才是新式类,所以很显然什么都不写就是经典类了,事实上就是如此,如果你没有指定一个父类,或者如果所子类化的基本类没有父类,你这样就创建了一个经典类。我们来看一个例子:

    1 #!/usr/bin/python2
    2 #-*- coding:utf-8 -*-
    3 
    4 class MyObjectType:
    5     'define MyObjectType classic class'
    6     class_suite
    View Code

    新式类详解

      由上可知,在类继承object这个基类的就是新式类。但在Python3.x中默认都是新式类,经典类被移除,不必显示继承object。

     1 #!/usr/bin/python3
     2 #-*- coding:utf-8 -*-
     3 
     4 class MyObjectType(object):
     5     'define MyObjectType new class'
     6     class_suite
     7     
     8 class MyNewObjectType():
     9     'define MyObjectType new class'
    10     class_suite
    View Code

     说到经典类和新式类,就一定要提一提深度优先和广度优先这两个名词。

    新式类的MRO算法采用C3算法广度优先搜索,而经典类的MRO算法则是采用深度优先搜索。

    深度优先

     1 #!/usr/bin/python2
     2 #-*- coding:utf-8 -*-
     3 
     4 class A:
     5     pass
     6 class B:
     7     pass
     8 class C(B):
     9     pass
    10 class D(C,A):
    11     pass
    View Code

    执行顺序为:D->C->B,->A

    广度优先

     1 #!/usr/bin/python3
     2 #-*- coding:utf-8 -*-
     3 
     4 class A(object):
     5     pass
     6 class B(object):
     7     pass
     8 class C(object):
     9     pass
    10 class D(A,B,C):
    11     pass
    View Code

    执行顺序为:D->A->B->C->Object

  • 相关阅读:
    Mybaits利用插件generator自动生成sql
    idea设置
    centos虚拟机的相关知识
    nginx部署
    apollo配置
    分布式报错解决方案
    搭建springconfigCenter遇到的坑
    idea中git配置
    SpringCloudDay1_概念
    03.2020 MB SD Connect C4 Software “set_SDconnect.bat” File Lost Error Solution
  • 原文地址:https://www.cnblogs.com/GaJack/p/8746665.html
Copyright © 2011-2022 走看看