python第二十三天 XML模块,面向对象思想与类的定义

今日内容

XML模块,面向对象思想,类的定义

1.XML模块

xml是一种可扩展的标记语言格式如下

使用 <> 作为标签格式

<tag style: '' color:read '' > 123 </tag>

标签的三个组成部分:

tag : 是标签名字

123:是文本内容

<style = '' color:read '' > : 是标签的属性,在这里是指标签的颜色

<tag></tag> : 双标签,有头有尾

<tag> : 单标签,没有文本,一般用于设计的结构,比如换行等

作为一门语言,那他的文件格式肯定有一定的规范:

1. 有开始,必须有结束

2. 所有的 属性 必须在双引号内

3.只能有一个根标签(最外层只能有一个标签)

4.开始标签和结束标签的顺序是相反的,最先打开谁,就最后关闭谁,最后打开的最后关闭

# 文档可以写声明,也可以不写,声明的主要作用是告诉浏览器该如何解析

获取某个标签的详细内容:

import xml.etree.ElementTree as ET

tree = ET.parse('test1.xml')     # 解析xml文件
root = tree.getroot()    # 获取根标签

# 在根标签下找到所有的country子标签
es = root.findall('country')

# for e in es:
#     print(e.tag)     # e.tag 获取标签名称
#     print(e.attrib)  # e.attrib 获取标签的所有属性,返回一个字典
#     print(e.text)    # e.text 获取标签的文本内容

# 获取所有国家的 邻居的名称
for c in es:
    print('%s的邻居如下:'% c.attrib.get('name'))  # 每次获得一个子标签内带'name'的key
    for n in c.findall('neighbor'):                # 每次获取一个kye是'neighbor'的子标签
        print(n.attrib.get('name'))                # 输出结果是依次对应的是name 对应的 neighbor
    print('更新时间:%s'% c.find('year').text)     # 找到子标签'year'中的文本内容
    print('-----------')

  

修改标签的某个属性

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element

# tree = ET.parse('test.xml')  # 解析一个文件
# root = tree.getroot()        # 获取根标签

# 修改文本
# root.text = '这是根标签的文本'
#
# # 修改属性,没有则添加,有则覆盖
# root.set('name','jack')
#
# # 修改标签名字
# root.tag = 'data'
#
# tree.write('test.xml',encoding='utf-8',xml_declaration=True) # declaration:是否添加文档注释


# 把test.xml 中所有vear 标签的text 改值
# tree = ET.parse('test1.xml')
# root = tree.getroot()
# for e in root.iter('year'):
#     e.text = str(int(e.text) +5)
# tree.write('test1.xml')


# 把test1.xml 中的所有gdppc删除
# remove 函数,需要一个标签作为参数,即要被删除的标签,然后只能有父类标签来删除子标签
# tree = ET.parse('test1.xml')
# root = tree.getroot()
#
# for c in root.iter('country'):  # 循环遍历country 子标签
#     gdppc = c.find('gdppc')  # 查找'gdppc'
#     if gdppc != None:  # 如果有值
#         c.remove(gdppc)  # 那么就删除gdppc
#
# tree.write('test2.xml')

# 添加标签

tree = ET.parse('test1.xml')
root = tree.getroot()  # type:Element

# 创建需要被添加的子标签
new_tag = Element('ThisIsNewTag')
new_tag.text = '123'  # 设置文本
root.append(new_tag)  # 添加到root下
tree.write('test3.xml') # 写入文件

  

 代码生成xml文档

import xml.etree.ElementTree as et

# 创建标签
tag = et.Element('data')
tag.text = '123'
tag.set('name','jack')


# 创建一个元素树,并把tag添加到上面
tree = et.ElementTree(tag)
tree.write('test4.xml')

  

2.面向对象思想

面向对象的优点

          不需要关注具体细节,可以更好的关注业务逻辑,扩展性提高了,维护性高,复用性高

         缺点

          对比面向过程而言,程序需要先设计,结构更复杂,编程复杂度提高了,无法准确预知执行结果

应用场景

    对于扩展性要求较高的应用程序

对象

    具备某种特征与行为的集合体,并且是具体存在的就是对象

    具备相同特性和相同行为的集合体,是一种抽象的概念

对象和类的方法

        在生活中,先有对象,再有类

        在代码中,先有类,再有对象

类的定义:

关键字:class 

class ’类名‘    类名的书写规范:使用大驼峰,所有单词首字母大写

# 类的使用方法与定义
class Student:
    # 描述特征使用变量
    school = 'oldBoy'

    # 描述技能使用函数(方法)
    def say_hi():
        print('hello i am tiger')

    # class 中的代码仅在第一次加载时执行
    print('华丽的分割线--------')
    pass


print(Student.say_hi)
Student.say_hi()  # 类方法可以使用.来调用内部的所有数据,包括函数
print(Student.school)

stu1 = Student()   # 也可以赋值给其他变量
stu1.say_hi()      # 其他变量也同样拥有类的功能

 对象的使用:

class Person:
    country = 'China'

    def eat(self):
        print('正在吃饭中。。。')


p1 = Person()  # 拿到类这个对象
# print(p1)


p1.eat()  # 调用类中的函数

# 为对象添加属性
p1.name = '王勇'  # 在p1对象中添加一个叫 '王勇' 的值,然后赋值给name,并没有真的添加到类中,原类没有修改
print(p1.name)

# 给p1 对象单独添加country ,它并不会更改到类中
p1.country = 'USA'

# 在访问时优先访问自己的名称空间,如果找不到,会自动去类中寻找对应的属性
print(p1.country)  # 'USA'
print(Person.country) # 'China'


# 每个对象都会存储自己所在类的地址,可以使用__class__来访问
print(p1.__class__)
print(type(p1))  # type() 原理就是调用了__class__方法

# 查看名称空间中的内容
print(p1.__dict__)
print(Person.__dict__)

# 还可以在别的文件中调用类

  

猜你喜欢

转载自www.cnblogs.com/liguodeboke/p/10871523.html