函数封装

python基础17 ---继承补充知识

南笙酒味 提交于 2020-02-01 20:10:26
一、继承的顺序   1、在python中的类可以集成多个类,既然是继承多个类就有类的寻找顺序这么一说。其寻找方法就有广度优先和深度优先两种。   2、当类是新式类,多继承的情况下会按照广度优先的顺序查找。   如图:        当H这个类是新式类也就是说它的父类中有object这个类,那么他要查找某个属性,会先从自己的类中查找,如果没有再查找父类的,查找顺序为:H->E->B->F->C->G->D->A。注意父类A是最后查找的,所以说他是广度优先。     当H这个类是经典类也就是说它的父类中没有object这个类,那么他要查找某个属性,会先从自己的类中查找,如果没有再查找父类的,其查找顺序为:H->E->B->A->F->C->G->D。注意父类D是最后查找的,所以说他是深度优先。     以上两种查找属性的情况是建立在他们的父类的父类是同一个类的前提下,如果没有同一个类这么一说那么他们的查找顺序都是广度优先。如果是新 式类的情况下可以用类名.mro()的方式查看继承的顺序。二、子类中调用父类的方法图1 如图1:以前子类调用父类的属性时是指名道姓的查找父类的属性,这样就么有了继承的顺序这么一说了。 如图二、现在调用父类方法直接是用一个super()对象来直接调用父类的__init__方法,对象和函数属性之间是绑定方法的关系,     默认会自动传参,因此不用写self本身

第五章 面向对象之封装

半城伤御伤魂 提交于 2020-02-01 20:07:48
(摘录自 egon老师博客) 封装并不等于隐藏 先看一下如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) 其实这仅仅是一种变形的操作仅仅只在类定义阶段发生变形 类中所有双下划线开头的名称如__x都会在类定义是自动变形成:_类名_x的形式: class A: __N=0 类的数据属性就是共享的,但是语法上就可以把类的数据属性设置成私有的如__N,会变形成_A__N def __init__(self): self.__x=10 变形成_A__X def __foo(self): 变形成_A__foo print('from A') def bar(self): self.__foo() 只是在类内部才可以通过__foo的形式访问到 A._A__N 是可以访问到的,这种在外部是无法通过__x这个名字访问到 这种机制也是并没有真正意义上限制我们从外部直接访问属性,知道类名和属性就可以拼出名字_类__属性,然后就可以访问,如a._A__N,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形,主要用来限制外部的直接访问 变形的过程只在类的定义时发生一次,在定义后的复制操作,不会变形 继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的 正常情况 class A: def fa(self): print('from A') def

面向对象之封装

旧时模样 提交于 2020-02-01 20:03:46
一、封装    1.什么是封装?   在程序设计当中,封装是对具体对象的一种抽象,也就是说将某些部分隐藏起来,程序外部访问不到,其含义是其他程序无法调用的。   要了解封装,离不开“私有化”,就是将类或者是函数中的某些属性限制在某个区域之内,外部无法调用。    2.为什么要封装?   封装数据的主要原因是:保护隐私(把不想别人知道的东西封装起来)   封装方法的主要原因:隔离复杂度(比如:洗衣机,我们看见的就是一个黑匣子,其实里面有很多电器元件,对于用户来说,我们不清楚里面都有哪些元件,电视机把那些电器元件封装在黑匣子里,提供给用户的只是几个按钮接口,通过按钮来操作洗衣机)    3.被封装的两个特点:外界不能直接访问,内部依然可以使用。 二、封装两个层面   封装分为两层,但无论哪种层面的封装,都要对外界提供好访问你内部隐藏内容的接口(这个接口我们暂时可以理解为入口,有了这个入口,使用者无需且不能够直接访问到内部隐藏的细节,只能走接口,而且可以在接口的实现上附加更多的逻辑,来控制使用者的访问)   第一层面的封装(什么都不用做):创建类和和对象会分别创建二者的名称空间,我们只能用类名或者obj.的方式去访问里面的名字,这本身就是一种封装。   第二层的封装:类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用,外部无法访问,或者留下少量接口供外部访问。  

应用系统架构设计

感情迁移 提交于 2020-02-01 02:04:53
我们在做着表面上看似是对于各种不同应用的开发,其实背后所对应的架构设计都是相对稳定的。在一个好的架构下编程,不仅对于开发人员是一件赏心悦目的事情,更重要的是软件能够表现出一个健康的姿态;而架构设计的不合理,不仅让开发人员受苦受难,软件本身的生命周期更是受到严重威胁。这里我将针对在微软dotNet平台上做应用开发系统的一般架构流程设计做一个粗浅的讨论。 总体设计图 表示层 表示层由UI(User Interface)和UI控制逻辑组成。 l UI(User Interface) UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。根据客户端的不同我们大体将应用程序分为BS(Browser-Server) 浏览器结构,CS(Client-Server)桌面客户端结构。 BS的优点是无需操心客户端,只需要部署维护好服务器即可。CS的优点在于强大的界面交互表达能力。RIA(Rich Internet Application)是为了融合这两种结构优点的一种技术,它依赖在客户端一次性安装一个通用解释器之后即获得强大的界面交互表达能力和无需部署具体客户端的方便性。具体的实现技术很多,例如微软的SmartClient, Avalon; Macromedia的Flex;以JS为基础的Bindows;Ajax等等很多。 UI控制逻辑

python零基础二

一曲冷凌霜 提交于 2020-02-01 01:55:08
""" 函数参数的分类: 1.位置参数 2.关键字参数 3.默认参数 4.可变参数 *args 可以给0,1,多个任意类型的实参 **kwargs 可以给0,1,多个键值对类型的实参 函数参数传递的方式: 实参->形参 值? 基本类型 在函数内操作,对源数据没有任何影响 地址? 可变类型 在函数内操作,源数据同样会发生改变 递归函数 直接或者间接调自己 递归本质: 压栈操作 栈的工作原理(弹夹原理:先进后出 FILO) 斐波那契数列 汉诺塔(课下查) 青蛙跳台阶 递归错误:栈溢出错误 命名空间: 分类: 内置 全局 globals() 局部 locals() 加载顺序: 内置 -> 全局 -> 局部 B G L 搜索顺序: 局部 -> 全局 -> 内置 L G B 作用域(LEGB) L: 局部 当前函数 E: 闭包 嵌套函数的内部函数中 G: 全局 当前文件中的所有函数 B: 内置 所有文件 """ a = 10 def func1 ( c = 10 ) : d = 20 print ( locals ( ) ) print ( a ) def func2 ( ) : x = 10 print ( x ) def func3 ( ) : print ( a ) # print(globals()) print ( __name__ ) print ( __file__ )

应用系统架构设计

烈酒焚心 提交于 2020-02-01 01:23:59
我们在做着表面上看似是对于各种不同应用的开发,其实背后所对应的架构设计都是相对稳定的。在一个好的架构下编程,不仅对于开发人员是一件赏心悦目的事情,更重要的是软件能够表现出一个健康的姿态;而架构设计的不合理,不仅让开发人员受苦受难,软件本身的生命周期更是受到严重威胁。这里我将针对在微软dotNet平台上做应用开发系统的一般架构流程设计做一个粗浅的讨论。 总体设计图 表示层 表示层由UI(User Interface)和UI控制逻辑组成。 l UI(User Interface) UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。根据客户端的不同我们大体将应用程序分为BS(Browser-Server) 浏览器结构,CS(Client-Server)桌面客户端结构。 BS的优点是无需操心客户端,只需要部署维护好服务器即可。CS的优点在于强大的界面交互表达能力。RIA(Rich Internet Application)是为了融合这两种结构优点的一种技术,它依赖在客户端一次性安装一个通用解释器之后即获得强大的界面交互表达能力和无需部署具体客户端的方便性。具体的实现技术很多,例如微软的SmartClient, Avalon; Macromedia的Flex;以JS为基础的Bindows;Ajax等等很多。 l UI控制逻辑

应用系统架构设计

孤人 提交于 2020-02-01 01:19:06
摘自:http://www.cnblogs.com/simonw/archive/2005/04/27/146185.html 我 们在做着表面上看似是对于各种不同应用的开发,其实背后所对应的架构设计都是相对稳定的。在一个好的架构下编程,不仅对于开发人员是一件赏心悦目的事情, 更重要的是软件能够表现出一个健康的姿态;而架构设计的不合理,不仅让开发人员受苦受难,软件本身的生命周期更是受到严重威胁。这里我将针对在微软 dotNet平台上做应用开发系统的一般架构流程设计做一个粗浅的讨论。 总体设计图 表示层 表示层由UI(User Interface)和UI控制逻辑组成。 l UI(User Interface) UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。根据客户端的不同我们大体将应用程序分为BS(Browser-Server) 浏览器结构,CS(Client-Server)桌面客户端结构。 BS 的优点是无需操心客户端,只需要部署维护好服务器即可。CS的优点在于强大的界面交互表达能力。RIA(Rich Internet Application)是为了融合这两种结构优点的一种技术,它依赖在客户端一次性安装一个通用解释器之后即获得强大的界面交互表达能力和无需部署具体 客户端的方便性。具体的实现技术很多,例如微软的SmartClient,

应用系统架构设计

萝らか妹 提交于 2020-02-01 01:09:04
我们在做着表面上看似是对于各种不同应用的开发,其实背后所对应的架构设计都是相对稳定的。在一个好的架构下编程,不仅对于开发人员是一件赏心悦目的事情,更重要的是软件能够表现出一个健康的姿态;而架构设计的不合理,不仅让开发人员受苦受难,软件本身的生命周期更是受到严重威胁。这里我将针对在微软dotNet平台上做应用开发系统的一般架构流程设计做一个粗浅的讨论。 总体设计图 表示层 表示层由UI(User Interface)和UI控制逻辑组成。 l UI(User Interface) UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。根据客户端的不同我们大体将应用程序分为BS(Browser-Server) 浏览器结构,CS(Client-Server)桌面客户端结构。 BS的优点是无需操心客户端,只需要部署维护好服务器即可。CS的优点在于强大的界面交互表达能力。RIA(Rich Internet Application)是为了融合这两种结构优点的一种技术,它依赖在客户端一次性安装一个通用解释器之后即获得强大的界面交互表达能力和无需部署具体客户端的方便性。具体的实现技术很多,例如微软的SmartClient, Avalon; Macromedia的Flex;以JS为基础的Bindows;Ajax等等很多。 l UI控制逻辑

封装ResponseHandler定制处理HttpResponse

半城伤御伤魂 提交于 2020-01-31 07:23:42
HttpClient是一个高效的、功能丰富的HTTP客户端编程工具包,以编程的方式通过API传输和接收HTTP消息。返回的HttpResponse请求结果通过ResponseHandler<T>处理,可以定制封装功能逻辑。 ResponseHandler<T>是httpclient包内提供的接口,实现函数handleResponse()处理HTTP返回结果: package org.apache.http.client; import java.io.IOException; import org.apache.http.HttpResponse; public interface ResponseHandler<T> { T handleResponse(HttpResponse var1) throws ClientProtocolException, IOException; } 分享封装的4个HTTP返回结果请求类,简化处理逻辑,提高开发效率。 代码文件 HTTP返回结果类型 RespStr.java 返回字符串 RespJsonObj.java 返回JSONObject RespJsonArr.java 返回JSONArray RespFile.java 返回二进制文件 l 代码 Github下载: https://github.com/jextop/StarterApi

GRE封装解封装过程

不羁的心 提交于 2020-01-30 07:16:13
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(IPX, AppleTalk, IP,etc.)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。这是GRE最初的定义,最新的GRE封装规范,已经可以封装二层数据帧了,如PPP帧、MPLS等。在RFC2784中,GRE的定义是“X over Y”,X和Y可以是任意的协议。GRE真的变成了“通用路由封装”了。 GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。Tunnel是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且 在一个Tunnel的两端分别对数据报进行封装及解封装 。 GRE加封装过程如下: 1、Router A 收到X 协议报文后,首先交由X 协议处理   2、X 协议检查报文头中的目的地址域来确定如何路由此包   3、若报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel 接口   4、Tunnel 口收到此报文后进行GRE 封装,在封装IP 报文头后,设备根据此IP 包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。 5、 Router A根据封装的 IP报文头的目的地址,查找路由表