函数封装

类的封装,多态,内置函数

本秂侑毒 提交于 2020-01-10 03:16:35
1.多态 2.封装:   1.封装属性   2.封装方法   3.封装的原理   4.封装存在的问题   5.计算属性 3.类中内置函数 1.多态 多态是一种概念,指的是某种事物具备多个不同形态 例如 水:气态,固态,液态    动物:猫,狗,猪 OOP 中,标准解释:多个不同类型对象 可以响应同一个方法 并且产生不同结果 多态的好处:   只需要学习基类中的使用方法即可,不需要关心具体的哪一类,以及实现的,以不变应万变,提高了扩展性 案例: 2.封装 什么是封装:   对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口 注意:   封装有隐藏的意思,但不是单纯的隐藏 学习封装的目的:   就是为了能够限制外界对内部数据的访问 python中属性的权限分为两种:   1.公开的:没有任何限制,谁都可以访问   2.私有的:只有当前类本身能够访问 默认为公共的 如何封装:    在类内定义的属性前加 __ 开头的方法 为什么要封装:   1.提高安全性: 封装属性   2.隔离复杂度: 封装方法 一个类中分为两种数据:-->属性和方法 封装的原理:   python 是通过 <变形> 的方式来是实现封装的   如何变形: 在名称带有双下划线开头的变量名字前添加_类名, 如:_Person_id_card   通过变形后的名字可以直接访问被隐藏的属性,但通常不应该这么做

SQLite数据库C++ API封装

て烟熏妆下的殇ゞ 提交于 2020-01-09 06:19:41
   在一个项目中需要记录目标路径下所有文件的MD5值,由于SQLite简单易用,选择利用它来记录数据。唯一的一张数据表HistoricalMD5,三个属性Dir(完整路径)、Time(时间)、MD5。SQLite常用的C++ API有:sqlite3_open、sqlite3_prepare、sqlite3_bind_parameter_index、sqlite3_bind_text、sqlite3_column_count、sqlite3_step、sqlite3_finalize、sqlite3_close,为了调用方便,对这些函数做了以下封装。 Database.h #include <string> #include <vector> #include <sqlite3.h> using namespace std; class Database { public: Database(const char* filename); ~Database(); void insert(string dir, int time, string MD5); void update(string dir, int time, string MD5); void query(vector<vector<string> > &results); private: sqlite3

对vue项目中api接口的封装管理

只谈情不闲聊 提交于 2020-01-08 15:05:17
很多朋友在开发过程中,习惯性直接将api的调用写在单个组件之中,就直接调用请求。例如: 在前端项目开发中,从整体架构出发,我们可以将项目中所有api进行封装,从而便于我们进行统一管理。 在src目录下,新建api文件夹,在api文件夹下创建index.js和api.js。 1、api.js。主要用来统一管理项目所有api请求。 如下: import axios from 'axios' let host = window.g.ApiUrl // 获取主页信息 export const getindex = params => { return axios.get(`${host}/api/index/`, { params: params }) } // 获取城市信息 export const getcity = params => { return axios.get(`${host}/api/city/`) } // 获取详细信息 export const getdetail = params => { return axios.get(`${host}/api/detail/`, { params: params }) } // 注册 export const postRegister = params => { return axios.post(`${host}/api

封装登陆策略的函数,方便调用

廉价感情. 提交于 2020-01-07 20:41:53
登陆的策略: 将其封装为一个函数, 方便直接调用,调用之后的结果为true和false 所有的策略需要存在于一个对象中 var strategy = (function() { var obj = { allNum: /^\d+$/, allLetter: /^[a-z]+$/i, // 可以添加其他策略用于检索 } // 返回一个函数 return function(val, str) { return obj[str].test(val); } })(); // 绑定用户名失去焦点事件 ipt[0].onblur = function() { // 获得用户输入的内容 var val = this.value; // 验证用户名是否为纯字母 if(strategy(val, 'allLetter')) { console.log('验证通过'); }else { console.log('验证失败'); } } // 绑定密码失去焦点事件 ipt[1].onblur = function() { // 获得用户输入的内容 var val = this.value; // 验证密码是否为纯数字 if(strategy(val, 'allNum')) { console.log('验证通过'); }else { console.log('验证失败'); } } 来源: https:

封装函数实现存储和读取的功能

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-07 16:01:32
需求: 在全局中只有一个namespace函数, 可以实现两种功能, 一种是存储数据,另一种是读取数据 存储数据的时候: namespace('a.b.c', 123); 读取数据的时候: namespace('a.b.c') => 123 读取: namespace('a.b') => {c: 123} 读取: namespace('a') => {b: {c: 123}} a:{ b: { c: 123 } } 该函数可以实现两种功能: 第一种是可以存储数据: 当存储数据的时候需要接收两个参数,第一个参数是存储的路径,第二个参数存储的数据 第二种是可以读取数据: 当读取数据的时候,需要接收一个参数就是要读取的路径 var namespace = (function() { // 数据存储和读取的对象 var obj = {}; return function(path, val) { // 模拟函数的重载 if(arguments.length == 2) { //实参个数为2 则为存储数据 // 划分路径 var pathArr = path.split('.'); // 引用obj变量 var obj1 = obj; // 设置最后的键 var index = pathArr.pop(); // 循环产生对象 for(var i = 0;i < pathArr.length

浅析vue封装自定义插件

大憨熊 提交于 2020-01-07 13:07:56
  在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件。   在开始之前,先补充一句,其实利用vue封装自定义插件的本质就是 组件实例化的过程或者指令等公共属性方法的定义过程 ,比较大的区别在于封装插件需要手动干预,就是一些实例化方法需要手动调用,而Vue的实例化,很多逻辑内部已经帮忙处理掉了。 插件相对于组件的优势就是插件封装好了之后,可以开箱即用,而组件是依赖于项目的 。对组件初始化过程不是很熟悉的可以参考 这篇博文 。     我们从vue源码中,可以看到Vue.use的方法定义如下:  Vue.use = function (plugin: Function | Object) { const installedPlugins = (this._installedPlugins || (this._installedPlugins = [])) // 已经存在插件,则直接返回插件对象 if (installedPlugins.indexOf(plugin) > -1) { return this } // additional parameters const args = toArray(arguments, 1) args.unshift(this) //

FFMPEG音视频解码

ぃ、小莉子 提交于 2020-01-04 15:58:32
文章转自: https://www.cnblogs.com/CoderTian/p/6791638.html 1.播放多媒体文件步骤 通常情况下,我们下载的视频文件如MP4,MKV、FLV等都属于封装格式,就是把音视频数据按照相应的规范,打包成一个文本文件。我们可以使用MediaInfo这个工具查看媒体文件的相关信息。 所以当我们播放一个媒体文件时,通常需要经过以下几个步骤 ①解封装(Demuxing):就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。 ②解码(Decode):就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3等,视频的压缩编码标准则包含H.264,MPEG2等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV、RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。 ③音视频同步:就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的音频和视频数据

【Python学习之旅】---封装与反射(类的相关知识,面向对象三大特性:继承-多态-封装)

旧城冷巷雨未停 提交于 2020-01-03 21:41:29
#第一层封装:定义类#第二层封装:区分内外,有些属性只能内部使用,外部不能class Name: __a='你是猪' #封装变量a def __init__(self,name): self.name=name def get_name(self): print('我叫%s' %self.name)n1=Name('陈宇霞')print(Name.__dict__) #查看类属性字典print(n1._Name__a) #可以通过此种方式调用__a ,没有真正的封装#真正的封装:区分内外,给用户提供一个访问的接口函数进行调用,内部的实现逻辑,外部无法知晓class Room: def __init__(self,name,leng,width): self.name=name self.__leng=leng self.__width=width def get(self): #接口函数,让外部者调用隐藏的属性 return self.__leng * self.__widthr1=Room('厕所',100,50)print(r1.get()) #外部通过调用get函数实现#执行结果: {'__module__': '__main__', '_Name__a': '你是猪', '__init__': <function Name.__init__ at

Python面向对象编程的三大特性

為{幸葍}努か 提交于 2020-01-03 19:26:02
面向对象编程的三大特性 面向对象的三大特性是指:封装、继承和多态 01对象和类 类(Class) 是现实或思维世界中的实体在计算机中的反映,它将数据以及这些 数据上的操作封装在一起。 对象(Object) 是具有类类型的变量。类和对象是面向对象编程技术中的最基本 的概念。 如何定义类? class 类(): pass 如何将类转换成对象? 实例化 是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概 念类,具体到该类实物的过程。实例化过程中一般由类名 对象名 = 类名(参数1,参数2…参数n)构成 类(Class) 是是创建实例的模板 对象(Object) 是一个一个具体的实例 # class 类名称: 定义类的方式 class Person : # 占位关键字, 什么也不做 pass print ( Person ) # <class '__main__.Person'> 存储于当前脚本的Person类 # 对象:将类实例化/具体化产生的值 personObj = Person ( ) # <__main__.Person object at 0x7f28164b04d0> # 当前脚本的Person类实例化出来的对象存储的内存地址是0x7f28164b04d0 print ( personObj ) Python中自带的类有: from datetime

Java常见开发规范

倖福魔咒の 提交于 2020-01-03 01:07:56
1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司。在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉了? 随着时间的推移,笔者也经历了几个软件项目,越来越意识到开发规范的重要。今天笔者将自己的所听、所学以及个人的总结汇总出来与大家分享,希望可以为大家提供帮助。 2 目的意义 在团队协作开发的情况下,一套鲜明的编程风格,可以让协作者、后继者和自己一目了然,在很短的时间内看清程序的结构,理解设计的思路。提高代码的可读性、可重用性、程序健壮性、可移植性和可维护性。制定开发规范的目的是为了提高软件开发效率及所开发的软件的可维护性,提高软件的质量。通过开发规范的约束提升自身的逻辑思维能力,也侧面的提升个人编码能力及水平。 3 开发规范 作为软件项目的开发人员而言,对于功能代码,首要的要求是代码必须正确的,能够保证功能是可运行的,并且能够满足客户的需求。第二个的要求是代码必须清晰易懂,方便于其他的程序员能够容易理解代码的原理,增强代码的可读性,保证代码统一一致的编程风格。下面我们通过格式、命名、权限、性能等几个方面来明确开发规范。 3.1 统一格式 整体风格 采用阶梯层次组织程序代码。每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对下一行同样要再缩进4格。参考代码如下: