• python之面向对象(一)


    python编程分为三个阶段:

    1. 面向过程编程:根据业务逻辑从上到下垒
    2. 函数式编程:将某功能进行函数封装,使用时调用函数即可,减少代码重复量
    3. 面向对象编程:对函数进行分类和封装

    理论上我们是比较鄙视面向过程编程的,那么问题来了,那函数式编程和面向对象编程我们该用哪个呢?

    先来看两个的特点吧:

    • 函数编程,逻辑清晰,简单,为项目而生,维护困难,函数式编程提倡的解决方案是数据是不可变的, 就没有了一直在改变的状态, 从而降低了复杂度.
    • 面向对象,大而全,复杂,为大项目而生,开发周期长,理论上长久维护简单,实际上一塌糊涂...面向对象一个最大的特点是抽象, 所以面向对象式编程特别适合处理业务逻辑,因此被广泛应用于目前的软件开发当中.

    总结

    • 那么什么情况下用面向对象呢?当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可,我觉得这个是对于我这种初学者的最简答案了吧...

    • 什么时候使用函数式编程呢?各个函数之间是独立且无共用的数据

    类和对象的创建

    面向对象编程方式的落地,需要使用类和对象来实现:

    • 类可以看为一个模板,模板了包含了多个函数,函数实现某些功能
    • 对象是根据模板创建的实例,通过实例对象可以调用类中的功能函数

    那么我们来看一个例子吧:

    我是图

    • class是关键词,声明创建一个类
    • 类后面加(),表示创建对象
    • 类中定义函数时,第一个参数必须为self,而类中的函数称为方法

    面向对象的三大特性

    不是抽烟喝酒烫头....是

    1. 封装
    2. 继承
    3. 多态

    封装

    封装其实是分为两步:封装和调用!

    step1

    将内容封装到某处
    我是图

    从上面的图,我们可以看出一个问题,self是个什么东西?

    self是一个python自动会给传值的参数那个对象执行方法,self就是谁!

    类中有一个特殊的方法,叫构造方法:init,类会自动执行,我们可以用__init__方法来传入变量,初始化一些基础数据.

    step2

    调用就比较简单了,可分为两种情况:

    1. 通过对象直接调用被封装的内容
    2. 通过self间接调用被封装的内容
    class foo:
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
        def test(self):
            print('I am %s,age:%s'%(self.name,self.age))
    
    
    obj=foo('cc',22)
    print(obj.name)	#通过对象直接调用
    print(obj.age)
    print('=======================')
    objx=foo('cengc','33')
    objx.test()			#通过self间接调用
    

    out:

    
    cc
    22
    =======================
    I am cengc,age:33
    

    总结下:面向对象的封装,其实就是使用构造方法,将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容

    继承

    对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法,也可以这么认为:父类中的所有函数copy到了子类中.

    继承的叫法分为两种:父类/子类,基类/派生类.

    一个典型的继承的例子:

    class it:
        def __init__(self,name):
            self.name=name
    
        def woker(self):
            print('i am a iter,my name is %s'%(self.name))
    
    
    class coder(it):
        def coding(self):
            print('i am coding now!')
    
    a=coder('cc')
    a.coding()
    a.woker()
    

    输出:

    i am coding now!
    i am a iter,my name is cc
    

    需要注意的是:如果类中,包括子类的父类中定义了构造方法的参数时,创建对象需要传入相应的参数值!

    多继承

    python中的继承可以多继承,意思就是一个子类可以有多个父类,比如:

    class a(b,c,d,e):   #b,c,d,e为类
    	def xxx(self):
    	pass
    

    多继承中需要注意的是:

    • 多继承时,按照继承的顺序排优先级c3(c2,c1)

    先上两张图:

    深度优先,无共同父类,多继承方式

    图

    广度优先,有共同的父类,多继承方式,最后才去找共同的父类,
    图

    未完待续....

  • 相关阅读:
    RabbitMQ插件安装
    RabbitMQ安装与初始配置
    Spring Boot教程(四十二)LDAP来管理用户信息(2)
    Spring Boot教程(四十一)LDAP来管理用户信息(1)
    Spring Boot教程(四十)使用Flyway来管理数据库版本
    Spring Boot教程(三十九)使用MyBatis注解配置详解(2)
    Spring Boot教程(三十八)使用MyBatis注解配置详解(1)
    Spring Boot教程(三十七)整合MyBatis
    Spring Boot教程(三十六)使用MongoDB数据库(2)
    Spring Boot教程(三十五)使用MongoDB数据库(1)
  • 原文地址:https://www.cnblogs.com/ccorz/p/5601392.html
Copyright © 2020-2023  润新知