今日內容python
XML模塊,面向對象思想,類的定義shell
1.XML模塊編程
xml是一種可擴展的標記語言格式以下瀏覽器
使用 <> 做爲標籤格式ruby
<tag style: '' color:read '' > 123 </tag>微信
標籤的三個組成部分:app
tag : 是標籤名字函數
123:是文本內容spa
<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__) # 還能夠在別的文件中調用類
面向過程編程思想
關注的點就是完成任務的過程
第一步
第二步
一步一步按照固定順序來完成任務
是一種機械化的思惟,就像一條流水線,指定流水線只能生產指定產品
缺點:
牽一髮而動全身 擴展性很是低,可維護性差
優勢:
將複雜的事情,簡單化,並流程化
應用場景:
對擴展要求較低的程序
系統內核,shell腳本,計算器啥的
面向對象編程
是一種編程思想
面向:朝着 向着
對象是什麼
面向對象關注點是對象,把你的思惟角度從具體操做這 變成了一個指揮者
例如把大象裝進冰箱
1.打開冰箱
2.塞入大象
3.關閉冰箱
以上就是典型面向過程思想
換成面向對象
找一個具有裝大象這個技能的對象 而後命令它裝大象
注意:對象不是憑空產生的 須要咱們本身先設計對象 而後在使用它們
面向對象優勢:
不須要在關注具體的實現細節 能夠更好的關注業務邏輯
擴展性提升了,維護性高,複用性高
缺點:
對比面向過程而言.程序須要先設計,結構更復雜,編程複雜度提升了
沒法準確預知執行結果
應用場景:
對於擴展性要求較高的應用程序
qq,微信,王者榮耀
面向對象是一種編程思想,讓你不須要關心具體實現細節,而是關注對象
優勢:擴展性高,複用性,維護性
什麼是對象?
萬事萬物都是對象
對象:具有某種特徵與行爲的集合體而且是具體存在的就稱之爲對象
如來佛祖,owen
類: 某些具有相同特徵和相同行爲的集合體 ,是一種抽象概念 類型==類
人,動物,狗,老男孩的老師
特徵==屬性
行爲==技能
對象和類的關係
在生活中 先有對象 再有類
在代碼中 必須現有類 才能產生對象 (由於你須要提早告訴計算機這個對象是什麼樣的有什麼技能)
編程思想不是某一個具體語言或技術 ,
面向對象的語言:
python,Java,C++,C#
面向過程:
C,ruby
今天講到的知識點
xml模塊
tree = ElementTree.parser("文件")
root = tree.getroot()
# 查
root.iter/find/findall
# 增
root.append(標籤對象)
# 刪
root.remove(標籤對象)
修改
root.text = "新值"
root.tag = "新名字"
root.set("key","value")
tree.write()
1.面向對象是什麼?2.面向對象與面向過程的優缺點對比 以及使用場景對比3.什麼是對象 什麼是類4.類和對象的關係5.如何定義一個類6.如何建立對象7.屬性的訪問順序8.類和對象的名稱空間是獨立的