版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编程概述知识点良好的编程习惯常见编程错误测试和调试提示移植性提示知识点良好的编程习惯常见编程错误移植性提示软件工程知识知识点编程概述知识点良好的编程习惯常见编程错误测试和调试提示移植性提示知识点良好的编程习惯常见编程错误移植性提示软件工程知识知识点良好的编程习惯常见编程错误移植性提示软件工程知识性能提示知识点知识点知识点良好的编程习惯常见编程错误Table of Contents 1. 绪论2. python 2.1. 2.2. 2.3. 2.4. 2.5. 3. 控制流程 3.1. 3.2. 3.3. 3.4. 3.5. 4. 函数 4.1. 4.2. 4.3. 4.4. 4.5. 4.6.
2、 5. 列表、元组和字典 5.1. 6. 公共网关接口( CGI)入门 6.1. 7. 基于面向对象的编程 7.1. 7.2. 7.3. 测试和调试提示软件工程知识性能提示知识点良好的编程习惯常见编程错误软件工程知识性能提示知识点测试和调试提示软件工程知识性能提示知识点良好的编程习惯常见编程错误软件工程知识性能提示知识点常见编程错误软件工程知识性能提示知识点良好的编程习惯常见编程错误界面知识知识点测试和调试提示界面知识知识点良好的编程习惯常见编程错误测试和调试提示软件工程知识性能提示知识点 7.5. 7.6. 8. 自定义类 8.1. 8.2. 8.3. 8.4. 8.5. 9. 面向对象编程
3、:继承 9.1. 9.2. 9.3. 9.4. 10. 图形用户界面组件(一) 10.1. 10.2. 10.3. 10.4. 11. 图形用户界面组件(二) 11.1. 11.2. 11.3. 12. 异常处理 12.1. 12.2. 12.3. 12.4. 12.5. 12.6. 13. 字符串处理和正则表达式 13.1. 良好的编程习惯性能提示知识点良好编程习惯常见编程错误性能提示XML)知识点常见编程错误移植性提示软件工程知识性能提示良好的编程习惯性能提示知识点良好编程习惯常见编程错误性能提示XML)知识点常见编程错误移植性提示软件工程知识性能提示示例的 XML处理知识点良好编程习惯示
4、例DB-API)知识点良好的编程习惯常见编程错误移植性提示知识点良好的编程习惯移植性提示知识点性能提示常见编程错误测试和调试提示 13.3. 14. 文件处理和序列化 14.1. 14.2. 14.3. 14.4. 15. 可扩展标记语言( 15.1. 15.2. 15.3. 15.4. 15.5. 15.6. 16. Python 16.1. 16.2. 16.3. 17. 数据库应用程序编程接口( 17.1. 17.2. 17.3. 17.4. 18. 进程管理 18.1. 18.2. 18.3. 19. 多线程处理 19.1. 19.2. 19.3. 19.4. 性能提示知识点常见编程错
5、误软件工程知识性能提示绪论编程概述 example: 是一种区分大小写的语言。函数返回变量内存位置,性能提示知识点常见编程错误软件工程知识性能提示绪论编程概述 example: 是一种区分大小写的语言。函数返回变量内存位置,type 函数返回变量类型。20. 联网 20.1. 20.2. 20.3. 20.4. List of Examples 15.1. sort.xml 15.2. sorting.xsl 16.1. 动态生成 XML内容16.2. 一个 XML论坛的例子Chapter 1. Chapter 2. pythonTable of Contents 2.1. 知识点2.2. 良
6、好的编程习惯2.3. 常见编程错误2.4. 测试和调试提示2.5. 移植性提示2.1. 知识点 1. raw_input 是 python 的内建函数, 要求用户输入, 输入结果是一个字符串。test = raw_input(please input a number:n) 2. python 3. id 4. 在 python2.2 前,只提供一种除法运算符( /),运算的行为(即是 Floor 整数除法,还是 True 浮点除法)是由操作数的类型来决定的。如果操作数全是整数,就执行 Floor 除True 浮点除法。,表示方法和True 浮点除法。,表示方法和 c 语言差不多。”这个续行符
7、。就如影响房地产价格三大因素是地段, 5. 在 python 2.2 后的所有版本中, 设计者决定去除 (/) 的随意性。 决定采用两个操作符,其中/执行 True 除法; / 执行 Floor 除法。但这样会造成旧版本的程序出错,所以设计者采取了一种折衷的办法。如果不先声明, python 还是使用旧的 /操作符。如果要使用新的方法就要进行声明,声明方式是: from _future_ import division ,这样就可以用 / 和 /了。 6. 格式化字符串 print test is %d % integer1 7. 如果语句太长需要用到“ 8. 在过程式编程中,程序员把重点放在
8、写函数上,用于执行一些任务的行动被组合成函数,不同的函数进一步进行组合,即构成程序。 9. 采用面向对象编程,程序员的工作主要放在创建自已的“类”上。每个类包含数据及一系列函数。类的数据组件被称为数据成员或属性,类的函数组件则称为方法。 10. 重用,重用,再重用是影响软件开发三大因素。地段,不是地段。2.2. 良好的编程习惯 1. 在程序中使用丰富的注释。注释有助于其他程序员理解程序,有助于程序员调试,并列出有用的信息。以后修改或更新代码时,注释还有助于你理解自已当初编写的程序。 2. 每个程序都应以一条注释开始,描述该程序的用途。 3. 加一些空行来增强程序的可读性。 4. 有意义的变量名
9、可改善程序的“自编档能力”,也就是说,只需读一读程序,就能轻松理解它。 5. 因为 python 解释器可能保留了那些名称,赋值符号因为 python 解释器可能保留了那些名称,赋值符号“=”不能出现在if a = b: . )。会导致编译器在执行了文件中的语句后进行交供内if 等的条件部使用。 6. 在二元运算符两端添加一个空格。这样可以突出运算符,增强程序的可读性。 7. 和代数一样,可在表达式中添加原本不需要的括号,使其更清晰。2.3. 常见编程错误 1. 试图访问一个未赋值的变量,会产生运行时错误。 2. 不要把“=”相等和“=”赋值运算符操混了。语句中。 3. 忘记在 if 结构中插
10、入冒号是语法错误。 4. 不要忘记了缩进格式,否则会出现语法错误。由于 tab 键在不同系统中的长度不同,所以建议将 3个空格定为一个缩进级别。如果在一个程序中缩进量不同,会造成语法错误。2.4. 测试和调试提示 1. 使用 -i 选项( python -i test.py互模式,这非常适用于调试程序。 2. 为了避免难以察觉的错误,务必在程序中采用统一和正确的缩进。2.5. 移植性提示 1. 预计在 python 3.0 中,运算符 /只执行 True 除法。 3.0 发布后,程序需更新自已的程序。控制流程1是要采取的行动,python 程序实现的过程。控制流程1是要采取的行动,python
11、 程序实现的过程。代表一个从 0到 9 共 10个元素的序列,自增量为1。Table of Contents 3.1. 知识点3.2. 良好的编程习惯3.3. 常见编程错误3.4. 移植性提示3.5. 软件工程知识3.1. 知识点 1. 所谓“算法”,是指解决一个问题的“过程”,它包含两个含义,2 是采取这些行动的顺序。 2. 研究表明,只要三种结构就可以写出所有程序,这三种结构是:顺序结构,选择结构以及重复结构。 3. 算法求精,就是把算法用伪代码逐层分解成可以用 4. += 符号将符号右边的表达式的值加到左边的变量上,再将结果存回左边的变量。变量要先初始化,如果没有会出错。 5. rang
12、e(0,10,1) 6. 与非结构化程序相比,结构化编程所生成的程序要容量理解得多,所以更易测试、调试和修改,而且不易出错。3.2. 良好的编程习惯 1. 初始化所有变量。 2. 在信号值控制的循环中,当提示输入时,应明确指明信息值是哪一个。 3. 3级以内。0,可以导致差开始引入增量赋值符号,在老版本中1错误。pytho3级以内。0,可以导致差开始引入增量赋值符号,在老版本中1错误。python 中使用增量赋值符号是语法不要任由错误发生。 4. 在每个控制结构前后各留一个空行,将其同程序的其余部份区分开。 5. 嵌套级别过多,会使程序难以理解,通常应将嵌套控制在 6. 避免在 for 循环主
13、体更改控制变量的值,这有可能导致不易发现的逻辑错误。3.3. 常见编程错误 1. 将所有浮点数假设为是精确的,会导致不正确的结果。浮点数在大多数计算机中只是近似数。 2. 在赋值符号左边的变量初始化之前试图使用增量赋值是错误的。 3. 如果忘记 range 函数返回的序列的第一个值是3.4. 移植性提示 1. python 2.0错误。3.5. 软件工程知识 1. 经验表明,用计算机解决问题最有效的办法是为解决方案开发一种算法。一旦开发出正确的算法,通常能根据它方便地生成一个能实际工作的 python 程序。 2. 在从事大型的、复杂的项目时,一定要开发算法。这样才可能不会导致严重错误,从而推
14、迟项目进度。函数下,是/usr/lib/python2.2。- 只存在于声明它们的函数中。)。指定引用名。现在可以用def函数下,是/usr/lib/python2.2。- 只存在于声明它们的函数中。)。指定引用名。现在可以用def 语句中定义。如:或randomModule 来引用def test(aa =1,bb=2,cc=3):xxx 。Table of Contents 4.1. 知识点4.2. 良好的编程习惯4.3. 常见编程错误4.4. 移植性提示4.5. 软件工程知识4.6. 性能提示4.1. 知识点 1. python 的程序组件包括函数、类、模块和包。“模块”是包含函数和类定
15、义的文件。许多模块可以组合成一个集合,称为“包”。 2. 模块位于 python 安装目录的库目录下。 在 unix/linux/usr/local/lib/python2.2, 在 windows 上,则是 pythonlib 3. 函数定义中创建的所有变量都是“局部变量” 4. python 定义了 3个命名空间,分别是局部(local ),全局(global )和内建(built-in程序访问标识符的值时, python 会按特定顺序搜索命名空间(即按局部,全局和内建顺序) 5. import random as randomModule random 中的函数。 6. 重复使用重复的结
16、构,如 for 和 while ;递归使用选择结构,如 if 和 if/else 。之间的差别是,重复采用一个重复结构,而递归采用重复的函数调用。两者都要进行终止测试:重复会在循环继续条件为 false 时终止;递归在识别出基本条件是终止。由计数器控制的重复和递归都是逐渐终止:重复会不断改变一个计数器,直到计数器的值使循环继续条件变为false ;递归则不断对原始问题进行简化, 直到抵达基本条件。 重复和递归都可无休止地进行:如果循环继续检测永远都不能变成 false ,会发生无限循环;如果递归调用永远不能将问题简化成基本条件,会发生无穷递归。 7. 函数的默认参数设置需在keyword =
17、value 方式就可以了。keyword = value 方式就可以了。python 模块提供的函数和类集合。关键字参数可以不按位置顺序出现在函数调用中。用4.2. 良好的编程习惯 1. 尽快熟悉核心 2. 避免变量名遮蔽外层作用域中的名称。为此,要注意避免标识符与内建命名空间中的标识符同名,并避免在程序中使用重复的标识符。 3. 使用默认参数可简化函数调用的编写,但有的程序员认为,显式指定所有参数会使程序更易读。4.3. 常见编程错误 1. 用局部命名空间中的一个标识符遮蔽模块或内建命名空间中的一个标识符,可能引起逻辑错误。 2. 默认参数必须全部靠右。省略非靠右的参数是语法错误。4.4.
18、移植性提示 1. 使用核心 python 模块中的函数,通常可使用程序更易移植。4.5. 软件工程知识 1. 避免重复别人的劳动。尽量使用标准库模块函数,不要写新函数。这样可加快程序开发进度,并增强可靠性。因为你所使用的是经良好设计和测试的代码。 2. 每个函数都应该只限执行单一的、良好定义的任务,函数名应清楚地描述那个任务。 3. 就表明函数可能执行了太多的分散任务,列表、元组和字典如果实在想不出能准确表达函数作用的名称,就表明函数可能执行了太多的分散任务,列表、元组和字典通常,最好把这种函数分解成多个更小的函数。 4. 程序应写为若干个小函数的集合。这样使程序更易编写、调试、维护和修改。
19、5. 如函数需要大量的参数,表明它执行的任务可能过多。请考虑将函数分解成更小的函数,令其执行单独的任务。函数的 def 语句尽可能不超过一行。 6. 采用递归方式能解决的任何问题也可采用重复方式(非递归方式)解决。如果递归方式能够更自然地反映问题,并使程序易于理解和调试,通常应该首选递归方式。通常,只需几行代码就可完成一个递归方式,重复方式则相反,它需要大量的代码来实现。选择递归的另一个原因是,重复方案也许不是很直观。 7. 采用清晰的、层次清楚的方式对程序进行“函数化”,有助于保证良好的软件工程,但性能上要付出一定代价。4.6. 性能提示 1. 不要试图改写现成的模块函数使其更高效,因为这些
20、函数已非常完美了。 2. 一般不要编写会造成调用次数成指数级增加的“斐波拉契”式递归程序。 3. 避免对性能要求高的时候使用递归。递归调用既费时、又耗内存。 4. 一个由多个函数构成的程序,与一个没有任何函数的一体式程序相比,会产生大量的函数调用, 这些函数调用会占用大量的处理器时间和内存。 但另一方面, 一体式程序的编程、测试、调试和维护都比较复杂。因此对程序进行函数化时要综合考虑。保证能兼顾良好的性能和软件工程。Chapter 5. Table of Contents 5.1. 知识点支持 3种基本序列数据类型: 字符串(string ),列表(list-值”对的数据结;aList = 公
21、共网关接口( CGI)入门可用于几乎任何程序语言或脚本语言,比如WEB服务器获取资源,并将客WEB服务器。 ge支持 3种基本序列数据类型: 字符串(string ),列表(list-值”对的数据结;aList = 公共网关接口( CGI)入门可用于几乎任何程序语言或脚本语言,比如WEB服务器获取资源,并将客WEB服务器。 get 请求将表单内容作为1024个字符以内。 如果查询字符串超过这个限制,URL的一部份,用户看不到它们。如果表单包如用户名和密码, 也通常GET 请求的最简单形式的格式为HTTP标头,如 Content-type:text/html 。表明HTML/XHTML文档中文本
22、( DOWNLOADS.HTML)。服务器端和客户端。 CGI脚本是服务器端脚本的一个。基于面向对象的编程)和元组(tuple )。;aTuple = ()C,PERL和 PYTHON。URL的一部份发送。大多数 WEB服就必须GET /books/downloads.html 。列表是可变序列,字符串和元 1. Python 2. “映射”在其它语言中称为关联数据或“哈希”,是用于存储“键构。 python 支持一种映射数据类型,字典。 3. 创建序列: aString = 组是不可序列。Chapter 6. Table of Contents 6.1. 知识点6.1. 知识点 1. CGI
23、 2. 最常见的 HTTP请求类型是 GET AND POST。这些请求从户表单数据发送给务器将 GET请求查询字符串限制在使用 POST请求。 POST请求中发送的数据不是含许多字段, 那通常由 POST请求进行提交。 一些敏感的表单字段,使用这种请求类型来发送。HTTP/1.1。服务器收到请求后,会发送一个MIME类型,然后服务器发送请求的 3. web 应用程序采用两类脚本编程,例子,客户端脚本的一个例子是 javascriptChapter 7. Table of Contents 包含基类的一个元组,类可以从这些基类直接继承。如果类不从其-值对都代表在命名空类的文档字符串。如果类没有
24、指定文档化字符串,值为包含模块(文件)名的一个字符串,类定义于这个模块中。包含类名的一个字符串。None。7.1. 包含基类的一个元组,类可以从这些基类直接继承。如果类不从其-值对都代表在命名空类的文档字符串。如果类没有指定文档化字符串,值为包含模块(文件)名的一个字符串,类定义于这个模块中。包含类名的一个字符串。None。7.2. 良好的编程习惯7.3. 常见编程错误7.4. 测试和调试提示7.5. 软件工程知识7.6. 性能提示7.1. 知识点 1. 在过程式语言中,基本编程单元是“函数”,在面向对象语言中,基本编程单元是“类”,最终要通过它来实例化(即创建)对象。 2. _init_ 方
25、法是类的“构造函数”方法。每次创建类的一个对象时,都会执行它的构造函数。它会初始化对象属性,并返回 None。 3. 包括构造函数在内的所有方法至少要指定一个参数。该参数代表要调用其方法的类的对象。人们常把这个参数称为“类实例对象”。但由于这术语容易混淆,所以我们将任何方法的第一个参数都称为“对象引用参数”,或简称“对象引用”。方法必须通过对象引用来访问从属于类的属性以及其它方法。按照约定,对象引用参数称为 self 。 4. 类的特殊属性。 * _bases_ 他类继承,元组就会为空。 * _dict_ 与类的命名空间对应的一个字典。其中每个键间中的一个标识符及其值。 * _doc_ * _
26、module_ * _name_ 然后由解释器None。self 然后由解释器None。self 。始终遵循这一命名约定,可确保不同程序员在 C+和java 等程序语言中, 类可明确指出类的客户能访问哪些属性或方法。 这些属性或方法被认为是“公共”的。不能由类的客户访问的属性和方法则被认为是私有的。在python 中,对象的属性是肯定能访问的 - 没有办法阻止其它代码访问数据。然而, python提供一种特别的机制来防止任意访问数据。 在属性名附加双下划线前缀。 python 解释器会对属性执行 “名称重整”。如 self._hour ,python 会创建一个 _Classname_hour
27、 的属性。但它一样是可访问的,只是名字变了。 6. 构造函数也可以定义默认参数,从而在客户没有指定参数的前提下,为对象属性指定初始值。还可以定义关键字参数。 7. 析构函数 _del_ 是构造函数 _init_ 的相反,用于执行“终止清理”,回收对象的内存,使内存能被重用。析构函数通常只指定 self 参数,并返回 8. 类的每个对象都拥有在构造函数中创建的所有属性的拷贝。特定情况下,类的所有对象只能共享属性的一个拷贝。为此要使用“类属性”。它是“类范围”的信息(也就是说,它是类的一个属性, 而非类的特定对象属性) 。它可节省空间和时间, 提高性能。 为访问类属性,只需为属性名附加类名前缀,再
28、加一个小数点即可。 (Classname.xxx )7.2. 良好的编程习惯 1. 文档化字符串习惯上是一个三引号字符串。这样可以在不改变引号样式的前提下,扩展一个程序的文档(例如添加更多的行) 。 2. 尽可包含文档化字符串,使程序更有条理。 3. 将所有方法的第一个参数都命名为编写的 python 程序是一致的。 4. 属性名以单下划线开头, 虽然在 python 语法中没有特殊的含义, 但单下划线是 python 程序员使用类时约定使用的符号,表明程序员不希望类的用户直接访问属性。以单划线开头的属性揭示一个类的接口的相关信息。类如果定义了此类属性,它的客户就只能通过类提供的访问方法来访问
29、并修改属性值。如果不是这样做,通常会导致程序执行期间出现不可预料的错误。会导致该方法在如果代码所用的一个类的实现发生了改7.3. 常见编程错误会导致该方法在如果代码所用的一个类的实现发生了改 1. 忘记将对象引用 (通常是 self 参数)设为方法定义中的第一个参数,运行时被调用时,造成严重逻辑错误。 2. 直接访问对象的属性可能导致数据进入不一致状态。一个办法是让类提供“访问方法”,通过一种得到精心控制的方式来读写类数据。 3. 如果忘记在方法内部通过对象引用 (通常称为 self )来访问由对象的类定义的另一个方法,就会导致严重的运行时错误或者逻辑错误。如全局命名空间包含的一个函数与类的某
30、个方法同名,就会产生逻辑错误。此时,如果忘记通过对象引用来访问方法名,实际会调用全局函数。7.4. 测试和调试提示 1. 即使提供了访问方法,也无法自动确保数据完整性,程序员必须提供有效性验证。7.5. 软件工程知识 1. 本书的中心思想是“重用,重用,再重用”。我们的重点是“创建宝贵的类”,创造有价值的“软件资产”。 2. 先初始化对象,再让客户代码调用对象的方法。不能依赖客户代码正确初始化对象。 3. 利用访问方法控制对属性的访问(尤其是写访问)有助于确保数据完整性。 4. python 的类和模块化机利于程序的独立实现。变,这段代码是无需更改的。 5. 并不是所有的方法都要作为类的接口的
31、一部份。有的方法是类的其它方法的一种实用方法,不准备供类的客户使用。 6. a = 0 and a = 0 and a 10自定义类类可定义特殊方法)更高,_str_ ,为类的对象提供一个不正式的(即人们更容易理 7. 如果类的一个方法提供了构造函数(或其他方法)需要的全部或部份功能,请从构造函数(或其他方法)中调用那个方法。这样可简化代码的维护,并减少代码的实现改变后出错的可能。一个通用规则是:避免重复代码。 8. 合成是软件重用的一种形式,即类的成员引用了其他类的对象。 9. 在类成员引用了另一个类的对象的前提下,使那个成员对象能被公共访问,不但没有违反封装性,而且还可隐藏那个成员对象的私
32、有成员7.6. 性能提示 1. 链式比较表达式( 0 = a 10 )的效率比非链式表达式(因为链式比较表达式中的每个条件都只执行一次。 2. 如果数据的一个拷贝已经够用,请用类属性以节省空间。Chapter 8. Table of Contents 8.1. 知识点8.2. 良好的编程习惯8.3. 常见编程错误8.4. 软件工程知识8.5. 性能提示8.1. 知识点 1. 运算符 +在 python 中具有多种用途,比如整数加法和字符串连接。这就是运算符重载的一个例子。它会在不同的背景下执行最恰当的运算。 2. python ,那么 python就会执行以客户删除一个属性时执行(例如_dic
33、t_ 属性中找不到这个名称客户将值指派给对象的属性时执行python 运算符和增量赋值符号都能重载,有两个运算符不能重载,即 + - * 而且能 del anObject.attribute(例如 ,那么 python就会执行以客户删除一个属性时执行(例如_dict_ 属性中找不到这个名称客户将值指派给对象的属性时执行python 运算符和增量赋值符号都能重载,有两个运算符不能重载,即 + - * 而且能 del anObject.attribute(例如 anObject.attribute 和),会自动重载与运算符对应的增量赋值语句。)= 会调用对象的 _str_ 方法,并输出那个方法所返
34、回的字符串。如 : print test 下语句: print test._str_ 3. 前面介绍客户访问对象属性的方法有两种,一种是客户可直接访问属性(使用点访问运算符):另外,也可通过客户定义的访问方法来访问属性。这一节讨论另外一种技术 定义特殊方法,自定义直接属性访问的行为。 python 提供了一系列特殊方法,类可定义这此方法,以控制点访问运算符操纵类对象的方式。如: * _delattr_ * _getattr_ 客户访问一个属性名,但在对象时执行(例如 anObject.unfoundName ) * _setattr_ value ) 4. 在多数lambda。 5. 如果重载
35、一元运算符(如8.2. 良好的编程习惯 1. 如有必要, 请为你创建的模块提供 test 函数,这些函数可确保模块正常工作,通过演示模块的工作方式,向客户提供额外的信息。如以下语句: if _name_ = _main_: test() 如果另一个程序导入模块, _name_的值就会是模块名, 而 test 函数不会执行。 如果模块作为单独的程序执行, _name_的值是“_main_”, test 函数就会执行。8.3. 常见编程错误面向对象编程:继承 1. 面向对象编程:继承从_str_ 方法返回非字符串值是严重的运行时错误。 2. 在_setattr_ 方法中,通过点访问运算符为对象属性
36、指派值会造成无穷递归。相反,应使用对象的 _dic_ 属性。见 chapter8.2.py 8.4. 软件工程知识 1. 对于大型系统, 如果需要严格的数据访问, 设计者就应使用 _getattr_ 和_setattr_来确保数据的完整性。 大型系统的开发者如果使用 python2.2 ,可借助于 Properties 这种更高效技术来利用 _getattr_ 和 _setattr_ 。8.5. 性能提示 1. 有时,更好的方法是重载运算符的增量赋值版本,以便能够“当场”执行操作(也就是说,不通过新建对象来占用额外的内存) 。Chapter 9. Table of Contents 9.1.
37、知识点9.2. 常见编程错误9.3. 软件工程知识9.4. 性能提示9.1. 知识点 1. 创建新类时,程序员不必编写全新的属性和方法, 只需指明新类继承以前定义好的“基类”的属性和方法。 新类称为“派生类”。 每个派生类本身也可以是未来一些派生类的基类。在“单一继承”中, 类只从一个基类派生; 但在“多重继承”中, 派生类要从多个基类继承。 2. 覆盖后的派生类构造函数通常会调用基类构造函数,从而先初始化基类属性,再初始化派生类属性。 3. 从基类继承的所有类者得到了基类的功能。anObject.method() 。非绑定方法调并专门传递一个对象引用。这样的类称为“抽象类”。 由于它们在继所
38、以通常把它们称为“抽象基类”。支持“多态性”, 从基类继承的所有类者得到了基类的功能。anObject.method() 。非绑定方法调并专门传递一个对象引用。这样的类称为“抽象类”。 由于它们在继所以通常把它们称为“抽象基类”。支持“多态性”, 通过继承联系在一起的各个不同类的对象可针对同样的消息,shape),例如正方shape 类派生)。屏幕管理器使用基类引用绘制任何对象时 (无论它位于继承层次结构的哪一级)draw 消息。draw方法在每个派生类中都能被覆盖。 它只需要告诉每个对象在面向对象设计过如 Point._init_(self,x,y) ,self我们不为抽象类创建对象。,屏幕
39、管理shape 类的每个draw 自已就可以了。 4. 通过继承,可自定义现有软件。首先继承现有类的属性和行为,再添加新的属性或行为,或覆盖基类行为,从而对类进行自定义,使之符合我们的要求。 5. 基类指的是公共特性程中,设计者要找出公共特性,并对其进行归纳,以构成合理的基类。然后,派生类自定义基类功能之外的功能。 6. 绑定方法调用是通过一个对象来访问方法名,如用需要通过类名来访问方法,(Cricle 类的一个对象)作为对象引用传递。 7. 我们在把类想像成一种类型时,就假定要创建那个类型的对象。但是,偶然也需要定义一些类(程序员永远不打算创建它的任何对象)承层次结构中作为基类使用,它惟一的
40、用途是提供一个合适的基类,以便其他类从中继承接口,偶尔也继承它的实现,从中实际创建的类称为“具体类”。 8. python(方法调用)做出不同的响应。发送给多个类型的对象的相同的消息会呈现出“多种型态” 这正是“多态性”一词的来历。例如,假定矩形类从四边形类派生,那么矩形属于四边形的一个更具体的版本,能对四边形类的一个对象执行的操作(比台计算周长或面积)也能对矩形类的一个对象执行。 9. 现在讨论一下多态性的应用。一个屏幕管理器需要显示不同类的大量对象,其中包括软件写好之后再加入系统的新类型。系统要能显示各种几何形状(基类是形,圆形,三角形,矩形,点,线等等(都从基类来管理所有需要显示的类。器
41、都只是向对象发送一条对象都知道怎样绘制自已。屏幕管理器不需要关心每个对象的类型,也不需要关心以前是否见过这一种类型的对象 10. 多态性尤其适合实现分层式软件系统。例如在操作系统中,每类物理设备的工作方式都是不同的,但无论如何,从设备“读”和“写”数据的命令肯定能统一。发送给设备驱动程序对象的“写”消息需要在那个设备驱动程序的背景下进行专门解释,这具体取决于设备 都是将一些数量的字节从内存中放到设备中。python2.22.X 版本中,程。objectstaticmethodself 指定为第一个参数。 都是将一些数量的字节从内存中放到设备中。python2.22.X 版本中,程。object
42、staticmethodself 指定为第一个参数。 这样一来, 即使没有类的对象, 也python 程序调用模块里定义的函数的方式非常相似。在继承的类也可定义 _getattribute_方法必须调用方法的基类版本,才能获取属性值,这是由_getattribute_允许新类定义一个 _slots_ 属性,它可列出只允许类的对象拥有的属性。面向对象类型用于定义新类型。直接或间传递方法的名称。 再为函数调用返回的python 中,静态方方法,每次访问属性时都会执行的另一次调用。设备的“写入”操作没有任何区别的操作系统可使用一个抽象基类提供适用于所有设备驱动程序的一个接口。然后,通过从这个抽象类继
43、承,派生类可采取类似的方式工作。设备驱动程序具有的功能(即接口)作为抽象基类中的方法提供。在派生类中,对这些方法进行了具体的实现,它们与特定类型的设备驱动程序是相对应的。 11. 通过多态性编程,程序可遍历一个容器,比如由类层次结构各个级别上的对象构成的一个列表。只需发关一条消息就能执行列表中的所有对象。 12. 在 python2.2 之前的版本中,类和类型是两种截然不同的编程元素。所以程序员不能从内建类型继承,不便使用列表,字典和其它对象提供的高级数据处理能力。自起,类的本质与行为都发生了变化,消除了类型和类的差异。在将来的所有序员可区分两种不同的类,即所谓的“经典类”(它的行为方式与本章
44、前面以及前两章所展示的类相同)以及“新类”(它们具有新的行为)接继承于 object 的所有类都具有为新类定义的行为。 13. 所有类都可定义“静态方法”。静态方法可由一个客户调用,即使不存在类的任何对象。通常,静态方法是类的一个实用方法,不需要类的一个对象就能执行。一个类如果想把方法指定为静态的, 就必须向内建函数值绑定一个名称。 静态方法不将能调用静态方法。 14. 静态方法在 java 等语言中至关重要, 这些语言要求程序员将所有代码都放入一个类定义中。使用这些语言,程序员经常要定义只包含表态实用方法的类。随后,类的客户可调用静态方法,这和法允许程序员更准确地定义一个类接口。如果类的方法
45、不需要类的对象即可执行其的任务,程序员就可将这个方法指定为静态的。 15. 从基类 object它。派生类中的 _getattribute_于假如通过对象的 _dict_ 来访问属性值,会造成对 16. python2.29.2. 常见编程错误 1. _getattribute_ _getattribute_ 方法的一个派生类版本应该调用该方法的_dict_ 来返回属性值,会造成无穷递归。造函数就必须显式地调用基类构造函数。不从派生类中调用基类构造函数是逻辑错误。 2. 基类方法在派生类中被覆盖后,经常要让派生类版本调用基类版本,并执行一些附加的操作。在这种情况下,如果不使用基类名称来引用基类
46、方法(也就是为基类方法附加基类名称和一个点前缀) ,会造成无穷递归, 因为派生类方法实际调用的是自身。 这最终导致系统死机。 3. 不将非绑定方法调用的第一个参数指定为对象引用是逻辑错误。 4. 要保证正确的属性访问,基类版本。如试图通过访问对象的9.3. 软件工程知识 1. 和其他任何类一样,派生类不一定要定义构造函数。如果派生类没有定义构造函数,一旦客户创建类的一个对象,就会创建类的基类构造函数。 2. 创建派生类不会影响其基类源代码;基类的完整性通过继承获得了保持。 3. 在面向对象系统中,类通常是紧密联系的。因此,请归纳出公共属性和行为,将其放入一个基类,然后通过继承来生成派生类。 4
47、. 修改基类时,只要到基类的接口保持不变,就不必修改派生类。 5. 通过多态性,程序员可关注于公共特性,让执行时环境去关心具体特性。程序员可在不知道那些对象是什么类型的情况下,指示大量对象采取恰当的行动。 6. 多态性增强了扩展性:软件如果要调用多态行为,编写时便不用关心要向其发送消息的对象类型。因此可在不修改基本系统的前提下,自由添加新类型对象,令其响应现有的消息。 7. 那么一旦创建该图形用户界面组件(一)Widget(输入) 组件是一种特殊的屏幕区域,用户可以在其中输入文本,那么一旦创建该图形用户界面组件(一)Widget(输入) 组件是一种特殊的屏幕区域,用户可以在其中输入文本,也可显
48、示一行义。在多态性的帮助下,层次结构中的所有方法都可使用同一个接口。 8. 如果新类定义了 _slots_ 属性,但类的构造函数没有初始化属性值,类的一个对象, python 就会将 None值指派给 _slots_ 中的每个属性。 9. 派生类会继承它的基类的 _slots_ 属性。然而,如果不希望程序为派生类的对象添加属性,派生类就必须定义自已的 _slots_ 属性。在派生类的 _slots_ 中,只包含允许的派生类属性名,但客户仍可为派生类的直接 /间接基类所指定的属性赋值。9.4. 性能提示 1. 如果通过继承生成的类超过所需,可能会无谓地浪费内存和处理器资源。因此,请从最能满足你需
49、求的类继承。Chapter 10. Table of Contents 10.1. 知识点10.2. 良好的编程习惯10.3. 常见编程错误10.4. 界面知识10.1. 知识点 1. GUI 是事件驱动的, 也就是说, 一旦用户与 GUI交互,GUI组件就会生成”事件“ (动作)。常见交互包括移动鼠标、 单击鼠标按钮、 在文字段输入、 从菜单选择一个选项以及关闭一个窗口等等。 2. Tkinter 模块中的每一个 Tk GUI 组件都是从 Widget 类继承的一个类。所有从派生的类都具有公共的属性及行为。 3. Entry文本。 4. 方法规定了组件应该如何放到它的“父”中,以及应该放到什
50、么地方。会为每个组件分配一个不重复的名称。要想获得一str 函数即可。方法将一个 事件同,一个是方法在 Entry 组件中写入文本, 它要取得两个参数: 文本插入的位置和包含插INSERT,文本就会在当前光标位置插入。insert(END方法规定了组件应该如何放到它的“父”中,以及应该放到什么地方。会为每个组件分配一个不重复的名称。要想获得一str 函数即可。方法将一个 事件同,一个是方法在 Entry 组件中写入文本, 它要取得两个参数: 文本插入的位置和包含插INSERT,文本就会在当前光标位置插入。insert(END ,text) 。不可用 delete(start,finish)0,
51、所以如果 delete(0,END) 则是删除所的 winfo_name 方法返回组件名,函数显示一个标记为的 command关键字参数指定了在用户选择按钮之后要执行的事件处理程序。的参数,side 指明组件要靠在容器的哪一边,指定 组件在 容器 中应占 据的空 间 ( 在指 定的 方向上 ) ,可设 为填充容器中任何额外的空间。可围绕组件插入空白填充。布局管理器将容器分割为一个网格,使组件能以行、列形式放置。组件在网格中0rowconfigure布局管理器允许设置一个text1如果是 END,方法从 Entry 组件Entry 的 get 方法返回message的对话框。可选择 TOP(DE
52、FAULT),BOTTOM,LEFT pack_forget和 columnconfigureGUI组件的位置和大小 既可以是绝对值, 也可是与组件关联在一起。一旦用户按下回车键,Entry方法可从容器中删除一个 pack 好的方法来设置行和列。的内容。 5. 如果程序员不指定名称, Tkinter个组件的完整名称,将组件对象传给 6. bind 事件就会发生。 bind 方法要取得两个参数,一个是事件类型(事件格式)要与事件绑定的那个方法的名称。 7. insert入文本的一个字符串。 如果第一个参数是则在末尾插入,如:中删除文本。在 Entry 组件中,第一个位置编号是有文本。 8. Wi
53、dget showinfo() 9. Button 10. pack和 RIGHT。 fillNONE(DEFAULT),X,Y 或 BOT。expand 设置组件只否自动扩展,padx and pady组件。 11. Grid的位置由其 row和 column 值决定;网格中的每个单元格都可包含一个组件。行、列编号从开始。还可以调用 12. place另一个组件的相对位置和大小。它较复杂在这里不详细讨论。10.2. 良好的编程习惯这有助于避免混淆, 确保实现目标行为, 这有助于避免混淆, 确保实现目标行为, 并Tkinter图形用户界面组件(二)试图协调不同管理器的不为每个 Button 都
54、单独定义一个回调方法,简化 GUI 的调试。 2. 妥善选择布局管理器可使 GUI编程更容易。编程之前,先画好设计图,再选择最合适的布局管理器。 可用的布局管理器有三种, Pack(按添加的顺序放置组件) ,Grid( 以行、列形式排列组件), Place (允许程序员指定组件和窗口的大小和位置) 。10.3. 常见编程错误 1. 在同一个容器中使用多种类型的布局管理器,一旦同需求,就会导致应用程序死机。 2. pack 方法按定义顺序将各组件放到一个容器中,所以,如果错误定义顺序,会导致不可预料的结果, 相反,如果放置组件时, 采用了为 side,expand,fill,padx,pady
55、指派值的方式,就可以忽略其定义顺序,保证获得所需结果。 3. 有时可能指定重叠组件。代码中先出现的组件会被最近添加的组件遮住。10.4. 界面知识 1. 通过改变按钮的显示效果,可提供一种视觉线索,让用户知道自已已经选中了按钮,而且发生了相应的动作。Chapter 11. Table of Contents 11.1. 知识点11.2. 测试和调试提示11.3. 界面知识11.1. 知识点 1. 组件其实是能滚动的组件用于创建菜单。组件用于显示文本、图像、线条、和形状。(滑杆)组件允许用户从一系列整数值中选择。Pmw.initialise异常处理Tkinter Text,就不能使用组件。Pmw
56、模块的完整功能。 python 巨元件( Python Megawidgets,Pmw )提供高级的 GUI组件,它是基于 Tkinter组件其实是能滚动的组件用于创建菜单。组件用于显示文本、图像、线条、和形状。(滑杆)组件允许用户从一系列整数值中选择。Pmw.initialise异常处理Tkinter Text,就不能使用组件。Pmw模块的完整功能。模块提供的较少的组件开发的。每个 Pmw组件都合并了一个或多个 Tkinter 组件,从而生成更有用,更复杂的组件。 2. ScrolledListBox 组件叫滚动列表框,是由于列表中的项目个数较多,以至于列表无法在屏幕上显示时的解决方案。 3
57、. ScrolledText 4. MenuBar 5. Canvas 6. Scale 7. 其它 GUI工具包有 :PyGTK为 Gimp TooKit 组件提供了面向对象的接口。 GTK是一个高级的组件集,主要在 X WINDOWS系统中使用。 PyGTK是 GTK+的一部份,后者也是一个 Python工具包,用于创建图形用户界面。另一个流行的 GUI工具包是 wxPython,它是一个 Python扩展模块,提供了对 wxWindows(一个用 C+写成 GUI库)访问途径。 PyOpenGL为OpenGL库提供了一个 python 编程接口。 OpenGL是开发交互式二维和三维图形应
58、用程序的流行方案,11.2. 测试和调试提示 1. 程序使用 Pmw时,如果不调用11.3. 界面知识 1. 菜单项按照它们添加的顺序出现,因此,务必按正确顺序添加。通常按添加顺序从左到右排列。Chapter 12. Table of Contents 中异常处理的样式及细节基于使用 try 语句实现异常处理。try 可指定一个或try 块后,每个 except 子句指定了零个或多上异常类名,它except 中异常处理的样式及细节基于使用 try 语句实现异常处理。try 可指定一个或try 块后,每个 except 子句指定了零个或多上异常类名,它except 子句中指定一个标识答,程序用它
59、引处理程序利用标识符从异常对象获取与异常有关的信息。 except 子句之后,可选else 子句。如果 try 块中的代码没有引发异常,except 子句,那不必须包含一个Exception 类继承的。如果有一个 try 块中发生try 块后的第一个 except 处理程序。 解释器except ,需要将引发的异常类型与每个 excepttry 语句的异常处理程序, 并执行 tryexcept 子句处理了这个异常,如果某个语句发生了异常, 但该语句不在 trytry 语句,这个过程称为“堆栈辗转开解”。使用“异常处理的终止模型”,因为引发异常的Modula-3 语言,类似于try 语句包围着可
60、能引发异常的语句。 try 语句如果 except就会执行 else 子句中的代finally 子句,该子句肯定会except 类型比较, 直到匹配为止。处理程序的异常类型的一个派生类,就表tryc#和 java 。块会在异常发生后立即12.2. 良好的编程习惯12.3. 常见编程错误12.4. 测试和调试提示12.5. 软件工程知识12.6. 性能提示12.1. 知识点 1. Python 2. Python以关键字 try 开头,后续一个冒号和一个可能在其中引发异常的代码块。多个 except 子句,它们紧接在们代表要由 except 子句处理的异常类型。可在用被捕获的异常对象。子句中没有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南玉溪市华宁城合现代农业服务有限公司食用菌产业园招聘13人考试参考题库及答案解析
- 医药代表工作职责与规范
- 小学英语口语教学重点突破方案
- 医院导诊人员服务标准与操作规范
- 2025北京工商大学人才引进2人笔试模拟试题及答案解析
- 知产保护与专利申请流程解析
- 中医执业技能操作考试答题技巧解析
- 智能家电单片机系统设计方案
- 工厂电池安全生产管理及操作标准
- 幼儿行为观察记录表范本
- 2025年四川军事理论专升本考试复习题库附答案
- 2025年民航上海医院(瑞金医院古北分院)事业编制公开招聘62人备考题库带答案详解
- 2025年云南省人民检察院聘用制书记员招聘(22人)备考考试题库及答案解析
- 2025西部机场集团航空物流有限公司招聘笔试参考题库附带答案详解(3卷)
- 橙子分拣装箱一体机结构设计
- (一诊)达州市2026届高三第一次诊断性测试生物试题(含标准答案)
- 员工宿舍楼装修改造工程施工组织设计方案
- 钱铭怡《心理咨询与心理治疗》笔记和习题(含考研真题)详解
- 防水工程专项施工方案
- JJG 1148-2022 电动汽车交流充电桩(试行)
- 脑机接口技术与应用研究报告(2025年)
评论
0/150
提交评论