zoukankan      html  css  js  c++  java
  • 学习PYTHON之路, DAY 7

    面向对象三大特性

    一、封装

    封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

    所以,在使用面向对象的封装特性时,需要:

    • 将内容封装到某处

    • 从某处调用被封装的内容

    第一步:将内容封装到某处

     self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

                                  当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

    所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

    第二步:从某处调用被封装的内容

    调用被封装的内容时,有两种情况:

    • 通过对象直接调用
    • 通过self间接调用

    二、继承

    继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

    对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。

    多继承

    • 是否可以继承多个类
    • 如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

    1、Python的类可以继承多个类,Java和C#中则只能继承一个类

    2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

    • 当类是经典类时,多继承情况下,会按照深度优先方式查找
    • 当类是新式类时,多继承情况下,会按照广度优先方式查找

    经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

     

     1 class D:
     2 
     3     def bar(self):
     4         print 'D.bar'
     5 
     6 
     7 class C(D):
     8 
     9     def bar(self):
    10         print 'C.bar'
    11 
    12 
    13 class B(D):
    14 
    15     def bar(self):
    16         print 'B.bar'
    17 
    18 
    19 class A(B, C):
    20 
    21     def bar(self):
    22         print 'A.bar'
    23 
    24 a = A()
    25 # 执行bar方法时
    26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
    27 # 所以,查找顺序:A --> B --> D --> C
    28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
    29 a.bar()
    30 
    31 经典类多继承
    经典类多继承
     1 class D(object):
     2 
     3     def bar(self):
     4         print 'D.bar'
     5 
     6 
     7 class C(D):
     8 
     9     def bar(self):
    10         print 'C.bar'
    11 
    12 
    13 class B(D):
    14 
    15     def bar(self):
    16         print 'B.bar'
    17 
    18 
    19 class A(B, C):
    20 
    21     def bar(self):
    22         print 'A.bar'
    23 
    24 a = A()
    25 # 执行bar方法时
    26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
    27 # 所以,查找顺序:A --> B --> C --> D
    28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
    29 a.bar()
    30 
    31 新式类多继承
    新式类多继承

    经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错

    新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错

    注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

    3 继承的顺序

     

  • 相关阅读:
    ios开发启动页面
    C++再学习之路(五)
    C++再学习之路(四)
    opencv再学习之路(九)---制作对焦图像
    opencv再学习之路(八)---轮廓检测
    C++再学习之路---例程(一) 文本查询
    opencv再学习之路(五)---灰度直方图显示
    opencv再学习之路(七)---图像单个元素的访问
    opencv再学习之路(六)---模板匹配
    C++再学习之路(三)
  • 原文地址:https://www.cnblogs.com/nikitapp/p/6208478.html
Copyright © 2011-2022 走看看