• 面向对象编程


    一、概述

      在学习面向对象之前,我们用函数来封装我们的功能,当我们要使用时,就调用函数来实现我们的需求。现在我们学习了面向对象的知识,知道了类和对象,其实函数式编程和面向对象编程都可以减少重复代码,不过面向对象可以对函数进行分类和封装,使代码可读性好,易扩展。那么我们什么时候用到面向对象编程呢?我们先了解一些内容。

    • 面向过程:根据业务逻辑从上到下写垒代码
    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

    二、类和对象

      面向对象的编程其实就是: 类 + 对象

            什么是类,什么是对象?

      

    class Person(object):   # Person 就是类
    
        def __init__(self, name):
            self.name = name
    
    p = Person('bigberg')     # p 就是对象

    类:可以理解为他是一个模板,比如人们在说“人”这个名词的时候,没人知道这个“人”具体是指那个人!

    对象: 对象是一个实际的物体,他有自己的属性和特征、行为。比如说 韩梅梅这样一个具体的人。

    三、面向对象的适用场景

    3.1、提取公共功能

    我们以一个数据库连接作为例子

    # 连接数据库
    def connection(host, username, password, prort, dbname):
         # 连接数据库 host, username, password, port, dbname
    	 pass
    	
    # 关闭连接
    def close_db():
        pass
    	exit
    	
    	
    # 备份数据库
    def dump_func(host, username, password, prort, dbname):
        connection(host, username, password, prort, dbname)
        # 备份操作 host, username, password, prort, dbname
        pass
        close_db
    	
    # 创建数据库
    def create_db(host, username, password, prort, dbname):
        connection(host, username, password, prort, dbname)
        # 创建操作
    pass close_db # 我们以函数式的方式来实现,当然可以了。可是我们在实现具体功能的时候,都要做一次连接和关闭操作

    下面我们用面向对象的方法来实现一下:

    class DB_func(object):
    	
        def __init__(self, host, username, password, port, dbname):
    	self.host = host
    	....
    		
        def connection(self):
    	# 连接操作
    	pass
    	
        def close(self):
    	# 关闭操作
    	pass
    		
        def dump_func(self):
    	# 备份操作
    	pass
    		
        def create_db(self):
    	# 创建操作
    	pass
    		
    obj = DB_func('ip','user','111111','3306','dbname')
    
    # 连接
    obj.connection()
    
    # 备份
    obj.dump_func()
    
    # 创建
    obj.create_db()
    
    #关闭
    obj.close
    
    # 在这个事例中我们只要在开始时连接数据库,在离开时关闭数据库,中间的过程我们可以做很多其他的操作,但是都不需要重复调用连接和关闭方法
    

      

    3.2、多个函数传入公共参数

    我们还是以上例来做说明,在函数式编程中,每一个函数在执行的时候都需要传入相同的几个参数,即:

    dump_func(host, username, password, port, dbname)
    create_db(host, username, password, port, dbname)
    # 每次操作都需要写一遍

      

    我们去类里面调用方法的时候就不要传入参数了么?确实不需要了,python面向对象的最主要特定就是封装。

    obj = DB_func('ip','user','111111','3306','dbname') 在实例化的时候我们已经把这些参数传给类了,把它封装到了self中。

    如图:

    在类的对象当中,不仅存储着这个对象的参数,还有一个隐藏的参数叫做 “类对象指针”,他的作用就是告诉对象,去哪里找方法。

    如上图的类中每个方法都有一个self,意思是:obj调用就等于 def dump_func(obj),由于实参是存储在obj这个对象当中的,所以我们每次调用类中的方法时,

    就没有必要再传一大推参数了。

    看完上面的例子就的想到:如果在一些方法里共同使用了一组变量,如果这时候使用函数式编程,每次调用方法的时候都的传这些参数!

    这时候就要想到使用面向对象:把这些变量封装到对象中,每次调用的时候直接传这个对象即可!

    3.3 根据一个模板来创建不同的角色

    class Person(object):
        
        country = 'CN'   # 定义一个公有属性
    
        def __init__(self, name, age, gender, province, job):
            self.name = name     # 定义成员属性
            self.age = age 
            self.gender = gender
            self.province = province
            self.job = job
    
        def talk(self):      # 定义方法
            print('person is talking.....')
            
        def walk(self):
            print('peron is walking...')
            
        def eat(self):
            print('person is eating....')
    

     我们现在创建一个角色的时候:

    obj = Person('Stack', 22, 'M', 'ZJ', 'engineer')

    如果我们每创建一个人物类型,比较学生、教师等等,每次都有重新写一大堆同样的内容,是不是很麻烦的样子?

  • 相关阅读:
    git 多个commit合并一个
    前端本地proxy跨域代理配置
    .net core指定环境类型
    使用流程引擎整体解决方案
    通用流程相关方法说明及调用事例
    流程引擎及流程设计器的嵌入方式
    可视化流程设计——流程设计器演示(基于Silverlight)
    通用流程设计
    动态网站后台解决方案
    timestamp时间格式
  • 原文地址:https://www.cnblogs.com/bigberg/p/7203787.html
Copyright © 2020-2023  润新知