0
点赞
收藏
分享

微信扫一扫

Python编程:从入门到实践 —学习笔记3(重点难点归纳)(第九章到第十一章)


2018年12初完成了 Python编程:从入门到实践 基础篇的学习,接下来即将进入项目实战部分,项目实战代码主要上传GitHub网站。

对于学习中遇到的问题,每次问题的解决办法,都要记录下来,问题以后肯定还会遇到,有了记录,下次可以直接查找当时解决问题的办法,大大减少解决问题的时间。

目录:
9 类
10 文件和异常
11 测试代码

**

9. 类

**
9.1. 创建和使用类
类这一章会出现: --snip—表示该处的代码省略了,与前面的代码相同,直接复制过来即可
类中的函数称为方法;你前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要
的差别是调用方法的方式。
类处的方法__init__()是一个特殊的方法。注意:init前后都是双下划线。
如果不小心写成了单下划线,运行就会出现:
" Dog() takes no arguments "

一般采用# 注释。只需要在代码首行加上:就可以正常中文显示

coding=utf-8

或者

-- coding: utf-8 -- (将编码转换成utf-8格式,支持中文显示,但是三个双引号中间的中文注释还是报错)

定义方法下采用三个双引号中文注释用上面代码还是会报错,可以首行使用以下代码即可:

-- coding: cp936 --

CP936和UTF-8的区别,两种编码本身和Python是毫无关联的。
CP936其实就是GBK,IBM在发明Code Page的时候将GBK放在第936页,所以叫CP936。
至于GBK,百度百科就说的很清楚了:GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。这一版的GBK规范为1.0版。
UTF-8: UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
所以GBK和UTF-8简单的来说,区别就是编码方式不同,表示的文字范围不同。(UTF-8能表示更多的语言文字,更加通用)
9.2. 类的实例
可以以三种不同的方式修改属性的值:
直接通过实例进行修改;
通过方法进行设置;
通过方法进行递增(增加特定的值)

9.3. 类的继承
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用
继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用
ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超
类(superclass),名称super因此而得名。
class ElectricCar(Car):
“”“电动汽车的独特之处”""

def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)

在Python 2.7中,继承语法稍有不同,ElectricCar类的定义类似于下面这样
class Car(object):
def init(self, make, model, year):
–snip–
class ElectricCar(Car):
def init(self, make, model, year):
super(ElectricCar, self).init(make, model, year)
–snip—
函数super()需要两个实参:子类名和对象self。为帮助Python将父类和子类关联起来,这些实参必不可少。另外,在Python 2.7中使用继承时,务必在定义父类时在括号内指定object.

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子
类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

9.4. 导入类
从模块(python文件)中导入类和从模块中导入函数相同,一个模块中可以存入多个类。
从car_new模块中导入ElectricCar这个类
from car_new import ElectricCar

从一个模块中导入多个类时,用逗号分隔了各个类。导入必要的类后,就可根据需要创建每个类的任意数量的实例。
from car_new import Car, ElectricCar

my_beetle = Car(‘volkswagen’, ‘beetle’, 2016)
print(my_beetle.get_descriptive_name())

my_tesla = ElectricCar(‘tesla’, ‘roadster’, 2016)
print(my_tesla.get_descriptive_name())

你还可以导入整个模块,再使用句点表示法访问需要的类。这种导入方法很简单,代码也易于阅读。由于创建类实例的代码都包含模块名,因此不会与当前文件使用的任何名称发生冲突。
import car_new

my_beetle = car_new.Car(‘volkswagen’, ‘beetle’, 2016)
print(my_beetle.get_descriptive_name())

my_tesla = car_new.ElectricCar(‘tesla’, ‘roadster’, 2016)
print(my_tesla.get_descriptive_name())

要导入模块中的每个类,可使用下面的语法:
from module_name import *
不推荐使用这种导入方式,其原因有二。首先,如果只要看一下文件开头的import语句,就能清楚地知道程序使用了哪些类,将大有裨益;但这种导入方式没有明确地指出你使用了模块中
的哪些类。这种导入方式还可能引发名称方面的困惑。

需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法来访问类。这样做时,虽然文件开头并没有列出用到的所有类,但你清楚地知道在程序的哪些地方使用了导入的模块;你还避免了导入模块中的每个类可能引发的名称冲突。

9.5. 类的编写格式
类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述

可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。

需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。在包含多条import语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。

**

10. 文件和异常

**
10.1. 读取文件路径
通过使用绝对路径,可读取系统任何地方的文件。就目前而言,最简单的做法是,要么将数据文件存储在程序文件所在的目录,要么将其存储在程序文件所在目录下的一个文件夹中。
注意:Windows系统有时能够正确地解读文件路径中的斜杠。如果你使用的是Windows系统,且结果不符合预期,请确保在文件路径中使用的是反斜杠。
with open(‘pi_digits.txt’) as file_object:
contents = file_object.read()
print(contents)

夏树柏的电脑斜杠读取错误,换成反斜杠后正常了
file_path = ‘C:/Users/HP/Desktop/python_work/part_10/pi_digits.txt’
with open(file_path) as file_object:
contents = file_object.read()
print(contents)

方法readlines()从文件中读取每一行,并将其存储在一个列表中;接下来,该列表被
存储到变量lines中;
lines = file_object.readlines()

10.2. 写入文件
打开文件时,可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)或让你能够读取和写入文件的模式(‘r+’)。如果你省略了模式实参,Python将以默认的只读模式打开文件。
如果你要写入的文件不存在,函数open()将自动创建它。然而,以写入(‘w’)模式打开文
件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。

10.3. 异常
采用try except 处理
方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。

希望程序在发生异常时一声不吭,就像什么都没有发生一样继续运行。要让程序在失败时一声不吭,可像通常那样编写try代码块,但在except代码块中明确地告诉Python什么都不要做。Python有一个pass语句,可在代码块中使用它来让Python什么都不要做。

**

11. 测试代码

**
11.1. 测试函数
Python标准库中的模块unittest提供了代码测试工具

我们调用unittest的方法assertEqual(),并向它传递formatted_name和’Janis Joplin’。代码行self.assertEqual(formatted_name, ‘Janis Joplin’)的意思是说:“将formatted_name的值同字符串’Janis Joplin’进行比较,如果它们相等,就万事大吉,如果它们不相等,跟我说一声!”
代码行unittest.main()让Python运行这个文件中的测试。


举报

相关推荐

0 条评论