day23 xml 面向对象编程
今日内容:xml模块 概念,类与对象的关系,类的定义,对象的创建,属性的访问顺序,类和对象的名称空间是独立的
一、xml : 一个标签语言,一般用来作配置文件,也可用来做文件传输。python中的 xml就是一个解析标签文档的模块
1.1 首先标签文档的格式:
1) 双标签<tag>文本<\tag>:
2) 单标签<tag\>,没有文档,一般用于设计文档的结构,如换行等 <tr/>:表示换行
1.2 模块导入:import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
1.3 . 所有的修改【增删改都需要写入文件】
tree = ET.parser('目标文件‘) ==> 获得文档对象
root = tree.getroot() # type:Element ==> 得到一个根标签【声明一个类型,可以点出相应的语法】
-- 查: root.iter()全文找所有 find()子层第一个 findall()子层所有
root.iter() : 可以没有参数,返回一个迭代器对象,里面是所有的标签的内存地址,可以for 循环遍历每一个标签内存地址
有参数: 标签名(’country‘),返回一个迭代器对象,里面是所有层级的country标签的内存地址,可以for 循环遍历每一个country标签的内存地址
root.find(’country') : 一定要有参数,返回第一个子标签的内存地址,可以for循环遍历第一个‘country'下所有的了标签内存地址。
findall('country'):一定要有参数,返回一个列表【所有子标签的内存地址】。
-- 增:root.append(’year2‘) ,
先要创建一个标签: 【在country节点下新增一个子标签'year2'】
count= root.find('country')
创建一个子标签:
year2 = ET. Element('year2')
year2.text = '新年’
year2. attrib = { 'update': 'yes' }
count.append(year2)
tree.writer('new.xml', encoding = ' utf-8 ')
-- 删 root. remove(标签对象) 删除test1.xml 中所有gdppc
remove 函数需要一个标签作为参数,即要被删除的标签,---只能由父标签删除子标签【避免不存在无法删除报错先确认标签是否存在】。
for e in root.iter('country'):
gdp = e.find('gdppc')
if gdp != None:
e.remove(gdp)
c.write('new7.xml')
-- 改:
root.text = '新值 ' ==> 修改文本
root. tag = ‘ 新名字 ’ ===> 修改标签名字
root. set ('key', ' value' ) ==> 修改属性,有旧属性,就二次覆盖,没有就新增
tree.write('nwe8.xml',encoding='utf-8')
二、面向对象编程:是一种编程思想,
2.1 面向对象与面向过程的优缺点对比:
面向过程:1.关注的点就是完成任务的过程,第一步做什么,第二步做什么,是一种机械的思维,就像一条流水线
2. 优点是复杂事情简单化,流程化;缺点:牵一发动全身,扩展性非常低,可维护性差;应用于对扩展要求较低的程序,如:系统内核,shell脚本,计算器等。
面向对象:编程时不需要关心具体实现的细节,而是关注对象,
例如把大象装进冰箱:
1.打开冰箱,2.塞入大象,3.关闭冰箱 => 典型面向过程思想,换成面向对象:找一个具备装大象这个技能的对象,然后命令他装大象。
2. 面向对象,对象不是凭空产生的,需提前设计对象,再使用它。
3. 面向对象的优点:不需要关注具体的实现细节,可以更好的关注业务逻辑。对象与对象之间是独立的,所以扩展性提高了,维护性高,复用高,活字印刷的故事
4. 对比面向过程而言,程序需要先设计,结构更复杂,编程复杂度提高了,无法准确预知执行结果,应用场景,对于扩展性要求性较高的程序,如QQ,微信。
5. 面向对象,什么是对象:1) 有特征与技能的具体存在物体就称之为对象 , 2)具有相同的特征与技能的对象的集合体就是类,是一种抽象的概念:人类,车,食物。
-- 类与对象的关系: 现实生活中,先有实实在在的对象,再抽象出类的概念 ; 代码中,必须先定义一个类,才能产生实例一个对象。【必须先告诉计算机这个对象是什么样的,有什么技能】
-- 定义一个类:class 关键字,类名(大驼峰)+ 冒号,类内可以定义变量,=>属性, 定义函数=> 方法, 类在定义时就被解释器解释执行了
-- 产生对象:类名+括号调用类就产生一个对象。
-- 属性的访问顺序:类与对象都有自己独立的名称空间 | 属性的访问:类访问类的,不能访问对象的; 对象优先访问对象自己的,自己没有就在所属类中寻找,
定义类的时候产生一个类的名称空间,=> Teacher._ _dic_ _ 查看名称空间
产生对象的时候,就产生了一个对象的名称空间,对象内有一个_ _class_ _ 指向该对象所属类的名称空间,故对象可以访问类中的属性,给对象新增修改属性:【对象. 属性 = 值】