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的对象然后执行其方法,这就是多态

  • 相关阅读:
    mysql报错:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    MD5登陆密码的生成
    15. 3Sum、16. 3Sum Closest和18. 4Sum
    11. Container With Most Water
    8. String to Integer (atoi)
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    几种非线性激活函数介绍
    AI初探1
    AI初探
  • 原文地址:https://www.cnblogs.com/pyrene/p/6414618.html
Copyright © 2011-2022 走看看