zoukankan      html  css  js  c++  java
  • 第十四篇 面向对象三大特性

    首先面向对象并不是所有情况都适用的

    小例子

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class pyrene:
        def fet(self,back):
            print(back,self)
    
    obj = pyrene()
    obj.fet("a")
    View Code

    一、面向对象

    上面的执行顺序:

    1)首先创建对象 obj = pyrene()

    2)执行方法 obj.fet("a")

    这里的对象叫做类对象指针

    下面是类对象指针形象图

    self、是形式参数,在python内部传递(self就相当于类创建的对象)

    二、面向对象--封装

    封装解读:

    首先让数据封装到对象里面,然后调用构造方法

    来看代码:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class pyrene:
        def __init__(self,bk):
            """
            构造方法
            :param bk:
            """
            self.backend = bk#普通字段,保存在对象里面
        def fetch(self):
            print(self.backend)
        def add_record(self):
            print(self.backend)
    #创建对象,实例,并且将数据封装到对象中
    obj1 = pyrene("hello")
    obj1.add_record()
    View Code

    执行obj1 = pyrene("hello"),其实是执行了如下步骤

    1、首先把数据封装到obj1中

    2、执行构造方法__init__

    三、面向对象--继承

    猫属于动物,这里就可以说猫是动物的子类(派生类),动物是猫的父类(基类)

    注意点:

    1、基类和派生类都有相同的方法的时候会执行子类的方法

    2、派生类可以有多个基类     执行顺序:广度优先(python2.7的经典类执行顺序是:深度优先)

    看下面例子:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class a():
        def f2(self):
            print("a")
    class b():
        def f1(self):
            print("B")
    class c(a):
        def C(self):
            print("c")
    class d(b):
        def D(self):
            print("D")
    class e(c,d):
        def E(self):
            print("E")
    obj = e()
    obj.f1()

    可以看到e继承c和d。这里是执行f1方法执行顺序如下:

    首先会去继承的c类中寻找,c类中没有f1方法,之后去a中寻找,a中没有,接着去d类中寻找没有,接着去b类中终于找到了f1方法

    再看下面

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class A(object):
        def f1(self):
            print("A")
    class a(A):
        def f2(self):
            print("a")
    class b(A):
        def f2(self):
            print("B")
    class c(a):
        def C(self):
            print("c")
    class d(b):
        def D(self):
            print("D")
    class e(c,d):
        def E(self):
            print("E")
    obj = e()
    obj.f1()
    View Code

    这里和上面区别在于a和b共同继承一个A类,这个时候的执行顺序:

    首先会去继承的c类中寻找,c类中没有f1方法,之后去a中寻找,a中没有,接着去d类中寻找没有,接着去b类中再去A类中找

    三、面向对象---多态

    python本身就支持多态

    什么是多态看下面代码:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class Foo:
        def a(self):
            print("Foo")
    class Bar:
        def a(self):
            print("Bar")
    def func(arg):
        arg.a()
    func(Foo())
    多态

    这里的args既可以是Foo的对象,也可以是Bar的对象然后执行其方法,这就是多态

  • 相关阅读:
    apex Error : Given no hashes to check 137 links for project 'pip': discarding no candidates
    源码编译pytorch-1.2.0
    proxychains
    git简单教程
    caffe ssd + cuda9.0
    ros+pcl error recoder
    硬盘挂载
    opencv3.4.1+ubuntu18.04+anaconda 源码编译
    从RocksDBStateBackend讲述Flink的State机制
    由Rocksdb状态后端引出的Tree的应用
  • 原文地址:https://www.cnblogs.com/pyrene/p/6414618.html
Copyright © 2011-2022 走看看