前续:
第九章 类
编写表示现实世界中的事物和类型的类,并基于这些类来创建对象。根据类来创建对象被称为实例化。
9.1.1 创建类
方法 __init __()
将方法定义成三个形参:self、name、age。在这个方法的定义中,形参 self 必不可少,还必须位于其他形参的前面,将自动传递self。
class Dog():
""" 模拟小狗的简单尝试 """
def __init__(self,name,age):
""" 初始化属性name和 age """
self.name = name
sekf.age = age
def sit(self)
""" 模拟小狗被命令蹲下 """
print(self.name.title() + " is now sitting.")
def roll_over(self):
""" 模拟小狗被命令打滚 """
print(self.name.title() + " rolled over.")
根据类创造实例:
my_dog = Dog("doudou",6)
my_dog.sit()
my_dog.roll_over()
输出:Doudou is now sitting.
Doudou rolled over.
9.3继承
9.3.1 子类的方法 __ init __()
创建子类的实例时,python首先要完成的任务是给父类的所有属性赋值。
class Car():
""" 模拟汽车的简单尝试 """
def __init__(self,make,model,year):
""" 初始化属性make,model和year """
self.make = make
self.model = model
self.year = year
self.reading = 0
def get_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read(self):
print("This car hes " + str(self.reading) + " miles on it.")
def update(self,mileage):
if mileage >= self.reading:
self.reading = mileage
else:
print("Can't!")
def inc(self,miles):
self.reading += miles
class ElCar(Car):
"""电动汽车的独特之处"""
def __init__(self,make,year):#初始化父类的属性
super().__init__(make,model,year)
#super()是一个特殊函数,帮助将父类和子类关联起来
my_car = Car('audi','a4',2016)
print(my_car.get_name())
my_car.update(23)
#my_car.reading = 23
my_car.read()
my_car.inc(10)
my_car.read()
输出:2016 Audi A4
This car hes 23 miles on it.
This car hes 33 miles on it.
9.3.3 给子类定义属性和方法
让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。
class Car():
""" 模拟汽车的简单尝试 """
# --snip--
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.reading = 0
def get_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read(self):
print("This car hes " + str(self.reading) + " miles on it.")
def update(self, mileage):
if mileage >= self.reading:
self.reading = mileage
else:
print("Can't!")
def inc(self, miles):
self.reading += miles
class elCar(Car):
"""电动汽车的独特之处"""
def __init__(self,make,model,year):
super().__init__(make, model, year)
self.battery = 0 #新属性
def describe_battery(self):#新属性对应函数
""" 打印一条电容量的信息 """
print("This car hes a " + str(self.battery) + "-KWh battery.")
my_tesla = elCar('tesla','model s',2016)
print(my_tesla.get_name())
my_tesla.describe_battery()
输出:2016 Tesla Model S
This car hes a 0-KWh battery.
9.3.4 重写父类的方法
在子类中重新定义一个这样的方法就可以改写父类方法。
9.3.5 将实例用作属性
将一个大型类拆成多个协同工作的小类。
class Car():
""" 模拟汽车的简单尝试 """
# --snip--
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.reading = 0
def get_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read(self):
print("This car hes " + str(self.reading) + " miles on it.")
def update(self, mileage):
if mileage >= self.reading:
self.reading = mileage
else:
print("Can't!")
def inc(self, miles):
self.reading += miles
class Battery():
#将上个例题describe_battery(self)函数花成另一小类
""" 模拟电动汽车电瓶的简单尝试 """
def __init__(self,battery = 70):
"""初始化电瓶属性"""
self.battery = battery
def describe_battery(self):
""" 打印一条电容量的信息 """
print("This car hes a " + str(self.battery) + "-KWh battery.")
class elCar(Car):
"""电动汽车的独特之处"""
def __init__(self,make,model,year):
super().__init__(make, model, year)
self.battery = Battery()
#将新定义的小类赋给初始化属性
#def describe_battery(self):
#print("This car hes a " + str(self.battery) + "-KWh battery.")
my_tesla = elCar('tesla','model s',2016)
print(my_tesla.get_name())
my_tesla.battery.describe_battery()
9.4 导入类
创建一个包含类的模块,上个例:创建 car.py 文件将类都导入
再创建另一个文件 my_cars.py,将类导入
(1)导入一个类
from car import Car
my_car = Car('audi','a4',2016)
print(my_car.get_name())
my_car.update(23)
my_car.read()
my_car.read()
(2) 导入子类
from car import elCar
my_tesla = elCar('tesla','model s',2016)
print(my_tesla.get_name())
my_tesla.battery.describe_battery()
(3)导入多个类
from car import Car,elCar
my_car = Car('audi','a4',2016)
print(my_car.get_name())
my_tesla = elCar('tesla','model s',2016)
print(my_tesla.get_name())
(4)导入整个模块
import car
my_car = car.Car('audi','a4',2016)
print(my_car.get_name())
my_tesla = car.elCar('tesla','model s',2016)
print(my_tesla.get_name())
(5)将一个模块导入另一个模块 el_car.py
将Car存储在一个模块中car.py,将 elCar 和 Battery 类存储在另一个模块中
form car import Car
class Battery():
--snip--
class elCar(Car):
--snip--
在my_cars.py文件中
form car import Car
form el_car import elCar
my_car = Car('audi','a4',2016)
print(my_car.get_name())
my_tesla = car.elCar('tesla','model s',2016)
print(my_tesla.get_name())
9.5 Python标准库
9.6 类编码风格
类名应采用驼峰命名法,即类名每个单词的首字母都大写,实例名和模块名都采用小写格式,并加下划线区分。
在每个类后紧跟文档字符串。简要的阐述其功能。
第十章 文件和异常
10.1 从文件中读取数据
首先创建文件xxx.txt后缀
23234
23555
43656
读取
with open('xxx.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
输出:
23234
23555
43656
函数 open() 接受一个参数:打开文件的名称,
with 在不再访问文件后将其关闭,
close() 关闭文件,
read() 读取文件全部内容,到达文件末尾时返回一个空字符串,显示出来就是一个空行,
使用 rstrip() 函数删除字符串末尾的空白。
10.1.2 文件路径
file = 'C:\...\xxx.txt'
with open(file) as file_object:
contents = file_object.read()
print(contents.rstrip())
10.1.3 逐行读取
with open('xxx.txt') as file_object:
for line in file_object:
print(line)
输出:
23234
23555
43656
10.1.4 创建一个包含文件各行内容的列表
with open('xxx.txt') as file_object:
lines = file_object.readlines()
for line in lines:
print(line)
10.1.5 使用文件的内容
with open('xxx.txt') as file_object:
#contents = file_object.read()
#print(contents)
lines = file_object.readlines()
string = ''
for line in lines:
string +=line.rstrip()
print(string)
print(len(string))
输出:
232342355543656
15
10.2 写入文件
name = 'xxx.txt'
with open(name,'w') as file_object:
file_object.write("28747")name = 'xxx.txt'
with open(name,'w') as file_object:
file_object.write("28747")
输出:
28747
(‘w’) 指要以写入模式打开这个文件。如果存在本文件,则清空原文件中的内容。
(‘r’) 指读取模式。
(‘a’) 附加模式。不会清空原文件。
(‘r+’) 读取并写入文件。
write() 写入字符串。
10.2.2 写入多行
write() 写入字符串文本末尾不会自动添加换行符,所有要在末尾加换行符
10.3 异常 error 并使用 try-except 或 try-except-else 代码块
ZeroDivisionError异常
(1)无法运行 例:5/0
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
5/0
ZeroDivisionError: division by zero
处理:
try:
5/0
except ZeroDivisionError:
print("You can't divide by zero!")
(2)使用异常避免崩溃
while True:
n = input("n:")
if n == 'q':
break
m = input("m:")
if m == 'q':
break
answer = int(n)/int(m)
print(answer)
处理:
while True:
n = input("n:")
if n == 'q':
break
m = input("m:")
if m == 'q':
break
try:
answer = int(n)/int(m)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
FileNotFoundError异常 没有找到要打开的文件
处理:
try:
with open('xxx.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
except FileNotFoundError:
print("Sorry,the file xxx.txt does not exist!")
10.3.6 分析文本
读取单词个数
words = contents.split()
num = len(words)
print(num)
后续: