学习时间:9:00——12:00 17:00——19:00
1.类
1.1创建和使用类
class Dog:
def __init__(self, name, age): #init前后有两个下划线!!!!!
self.name=name
self.age=age
def sit(self):
print(f"{self.name} is now sitting.")
def roll_over(self):
print(f"{self.name} rolled over!")
my_dog=Dog("doudou",8)
print(f"My dog'name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")
my_dog.sit()
my_dog.roll_over()
your_dog=Dog("Lucy",6)
print(f"\nYour dog'name is {your_dog.name}.")
print(f"Your dog is {your_dog.age} years old.")
your_dog.sit()
your_dog.roll_over()
(1)class+类名 来定义一个类
(2)类的名称通常大写,实例的名称通常小写
(3)通过实例访问的变量称为属性,例如name和age,属性可以指定默认值
(4)类中的函数称为方法,有关函数的一切都适用于方法例如sit()和roll_over()
(5)方法__init__()是一个特殊的方法,init前后有各两个下划线,用来区分普通方法
(6)定义包括三个形参:self、name、age,self必不可少且必须位于其他形参前面,它的作用是让实例能够访问类中的属性和方法,其本身是一个指向实例本身的引用,我们通过实参向Dog()传递名字和年龄,self会自动传递
(7)访问实例的属性,可以用句点表示法
(8)想要修改属性的值可以直接通过实例修改,也可以通过增加方法进行修改
1.2继承
编写类时,并非总要从空白开始,如果要编写一个类是另一个现成类的特殊版本,可以使用继承,一个类继承另一个类时,将自动获得另一个类的属性和方法,原有的类为父类,新的类为子类,子类可以继承,也可以定义自己的属性和方法
class Dog:
def __init__(self, name, age):
self.name=name
self.age=age
def sit(self):
print(f"{self.name} is now sitting.")
def roll_over(self):
print(f"{self.name} rolled over!")
class Toypoodle_Dog(Dog):
def __init__(self, name ,age):
super().__init__(name ,age)
my_dog=Toypoodle_Dog("huangdou",4)
print(f"My toypoodle dog'name is {my_dog.name}.")
my_dog.sit()
(1)创建子类时,芙蕾必须包含在当前文件中且位于子类前面,定义了子类名后圆括号内必须指定父类的名称,之后用__init__()接受Dog实例的所有信息,之后方法super()能够调用父类的方法,父类也称超类
(2)添加新属性的位置在super()下方
(3)对于父类中的方法,如果有不符合子类的,都可以进行重写,为此,只需要在子类中定义一个与要重写的父类方法名同名的方法即可
(4)可以在子类前面定义一个新类,然后在子类中将新类当做属性,调用时用句点表示法,先在子类中查找新的属性,然后在新类中查找对应的属性
1.3导入类
为了让文件简洁且易于阅读,可以将类存储在模块中,然后在主程序中导入所需要的模块
(1)导入单个类: from 模块名 import 类名
(2)从一个模块中导入多个类:from 模块名 import 类名1,类名2,...
(3)导入整个模块:import 模块名
调用时用句点表示法:模块名.类名
(4)导入模块中的所有类:from 模块名 import *
(5)使用别名:from 模块名 import 类名 as 别名
(6)标准库:是一组模块,包含其他编程员编写好的函数和类,只需在开头包含一条简单的import语句即可
2.文件和异常
2.1从文件中读取数据
with open(文件名) as 别名:
print(别名.read())
函数open()用来打开文件,括号内接受的参数是要打开的文件名
关键字with可以在不需要访问文件后将其关闭(注意没有用close()来关闭文件,这是因为当文件出现bug时close()未执行,文件将不会关闭,可能造成文件数据丢失或受损,或当过早的调用close()时,会发现需要使用时,文件已经关闭,因此with就避免了这些情况)
with open('test1.txt') as file_object:
content=file_object.read()
print(content)
方法read()可以读取文件中的全部内容,但是相比与原始文件,会发现多了一个空行,这是因为read()到达文件末尾时会返回一个空字符串,而这个空字符串显示出来就是一个空行,要删除空行,可以使用方法rstrip()
要打开不在程序文件所属目录中的文件,可以
with open '文件名/文件夹名.txt'”) as 别名:
逐行读取用for循环,要创建一个包含文件各行内容的列表用 文件名.readlines()
2.2写入文件
写入空文件:with open (文件名,'w'):
文件名.write()
附加到文件:给文件添加内容,而不是覆盖原来的内容,可以以附加模式打开文件
with open (文件名,'a'):
文件名.write()
2.3异常
异常用来管理程序执行期间发生的错误,如果没有异常处理,那么遇到错误程序会报错而无法运行;如果进行了处理,那么程序继续运行
使用try-expect代码块可以处理异常
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
如果try中的代码没有错误,那么会自动跳过expect代码块,如果遇到错误,python会运行与之匹配的expect代码块
如果不知道可能发生的错误,可以直接在expect后面的错误类型中输入Expectation,这就包含了所有可能发生的错误类型
2.4分析文本
方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分存储在一个列表中
2.5静默失败
有时候希望程序在发生异常时保持沉默,就需要pass语句,只需要在expect代码块下面输入pass即可,pass也可以充当占位符,提醒你程序的某个地方什么都没有做,当我们发现缺少时,可以回过头来进行处理
2.6存储数据
json模块可以将简单的数据结构转储到文件中,并在程序再次运行时加载该文件中的数据,更重要的是json数据格式并非python专用,也可以将这些数据和其他语言的人共享
存储一组数:json.dump()
接受两个实参:要存储的数据、可用于存储数据的文件对象
import json
numbers=[1,2,3,4,5]
file_name='numbers.json'
with open(file_name,'w') as f:
json.dump(numbers,f)
先导入模块json,然后创建一个数字列表,接着指定列表要存储在哪个文件中,扩展名通常用.json
将列表读取到内存中:json.load()
import json
file_name='numbers.json'
with open(file_name) as f:
numbers = json.load(f)
print(numbers)