本章是面对对象的编程范式。
1、轻松看对象
“模拟”正是面向对象编程的核心。
类和对象提高了程序的可复用性,加强了程序模拟真实世界的能力。
1)类
类需要定义,隶属类的有其属性和方法属性
class Bird(object): # class来定义名字为Bird的类,object为最基础的类
reproduction = 'egg' # 类的属性
def chirp (self,sound): # 类的方法属性(定义函数)
参数self:是为了在方法内部引用对象自身,调用时不需要传入
print(sound)
2)对象
通过调用类,可以创造类下面的一个对象并引用属性
对象名 = 类名()——可以创造对象
对象.属性——可以引用属性
对象.方法属性()——可以引用方法属性
除了共性的类属性外,我们还需要用于说明个性的对象属性
def set_color(self, color):
self.color = color # self参数:操作对象属性
_init_()——可以初始化对象属性
def _init_(self, color): #对象被建立会自动调用
self.color = color
self参数还有其他作用
def chirp(self, sound):
print(sound)
def chirp_repeat(self, sound, n):
for i in range(n):
self.chirp(sound) #self参数:方法内部调用同一类的其他方法
2、继承者们
1)子类
子类可以继承父类的基本属性,且有自己的属性
class Chicken(Bird) #这里Bird时父类,Chicken是子类
how_to_move = 'walk' #子类的属性
2)属性覆盖
在子类的用相同的方法属性可以覆盖父类的
super——可以调用父类被覆盖的方法属性
3、那些年,错过的对象
1)列表对象
dir()——查询一个类或对象的所有属性
help()——查询类或函数的说明文档
pass——啥都不做,保持程序结构的完整性
列表的方法调用:
a = [1, 1, 1, 9, True, False]
type(a) #查询a的类别
dir(a) # 查询一个类或者对象的所有属性
help(a) # 查询函数或类的说明文档
a.count(1) # 计数a中元素1的个数(其中Ture默认值是1,False默认值是0)
a.index(9) # 查询元素9第一次出现的下标
a.append(6) # 列表最后添加元素6
a.sort() # 排序
a.reverse() # 颠倒次序
a.pop() # 去除最后一个元素,并将该元素返回
a.remove(9) # 去除第一次出现的元素9
a.insert(0, 9) # 从下标为0位置插入9
a.clear() # 清空列表
2)元组和字符串对象
元组只能进行查询操作,字符串是特殊的元组
str = 'a你好鸭A'
sub = '你'
sub2 = ('说', '子')
str.count(sub) # 返回:sub在str中出现的次数
str.find(sub) # 返回:从左开始 查找sub在str中第一次出现的位置 如果str中不包含sub 返回-1
str.index(sub) # 返回:从左开始 查找sub在str中第一次出现的位置 如果str中不包含sub 举出错误
str.rfind(sub) # 返回:从右开始 查找sub在str中第一次出现的位置 如果str中不包含sub 返回-1
str.rindex(sub) # 返回:从右开始 查找sub在str中第一次出现的位置 如果str中不包含sub 举出错误
str.isalnum() # 返回:True 如果所有的字符都是字母或数字
str.isalpha() # 返回:True 如果所有的字符都是字母
str.isdigit() # 返回:True 如果所有的字符都是数字
str.istitle() # 返回:True 如果所有的词的首字母都是大写
str.isspace() # 返回:True 如果所有的字符都是空格
str.islower() # 返回:True 如果所有的字符都是小写字母
str.isupper() # 返回:True 如果所有的字符都是大写字母
str.split('好', 1) # 返回:从左开始 以空格为分隔符(separator) 将str分割为多个子字符串 总共分割max次将所得的子字符串放在一个表中返回 可以以str.split(",")的方式使用其他分隔符
str.join(sub2) # 返回:将sub2中的元素 以str为分隔符 合并成为一个字符串
str.strip('a') # 返回:去掉字符串开头和结尾的空格 也可以提供参数sub 去掉位于字符串开头和结尾的sub
str.replace(sub, '2') # 返回:用一个新的字符串2替换str中的sub
str.capitalize() # 返回:将str第一个字母大写
str.lower() # 返回:将str全部字母改为小写
str.upper() # 返回:将str全部字母改为大写
str.swapcase() # 返回:将str大写字母改为小写 小写字母改为大写
str.title() # 返回:将str的每个词(以空格分隔)的首字母大写
str.center(10) # 返回:长度为10的字符串 将原字符串放入该字符串中心 其他空余位置为空格
str.ljust(10) # 返回:长度为10的字符串 将原字符串左对齐放入该字符串 其他空余位置为空格
str.rjust(10) # 返回:长度为10的字符串 将原字符串右对齐放入该字符串 其他空余位置为空格
3)词典对象
词典同样是一个类
example_dict = {'a':1,'b':2}
for k in example_dict.keys(): #循环遍历每个元素的键
for v in example_dict.values(): #循环遍历每个元素的值
for k,v in example_dict.items(): #循环遍历每个元素
example_dict.clear() #清空字典内元素
4、意想不到的对象
1)循环对象
循环对象把要使用的元素在循环过程中逐渐生产,节省空间提高效率
iter()——将一个列表转变为循环对象
__next__()——返回列表的值
for结构——自动调用__next__()
生成器可以自定义循环对象,方法类似定义函数,但需要把return改为yield
yield——暂停运行,返回后面的值,继续运行
2)函数对象
__call__()——其对象都被当作函数
3)模块对象
import引入模块,实际上就是引入模块对象的属性:
import 模块——模块可以是自带模块或同文件下的模块
import 模块包.模块——需要在模块包防止__init__.py文件
from 模块 in 属性/模块*——引入模块某个属性或模块全部属性
模块.属性()——利用对象属性的方法调用
import 模块 as 名字——模块可以改名
模块对象.__name__——主程序的文件所对应的模块对象的模块名字为__main__
4、异常对象
异常也是一种对象
except 异常A as B——用B代表捕获到的类型对象异常A
raise 异常A()——异常A实际上是异常对象的类,所以举出异常会创建异常对象