標籤:電腦程式 連網 eating 編程 修改 並且 地方 print 對象修改
物件導向變成介紹
面向過程編程
核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麼時候處理什麼東西。主要應用在一旦完成很少修改的地方,如linux核心、git、apache伺服器等
優點:極大的降低了程式的設計複雜度
缺點:可擴充性差,改動一個地方很可能要改多個地方,牽一髮而動全身
物件導向編程:不是編程的全部,只是用來解決軟體可擴充性的
核心是對象(上帝式思維),對象作為程式的基本單元,一個對象包含了資料和操作資料的函數。物件導向就是把電腦程式作為一個對象集合,每隔對象都能接收其他對象傳來的訊息,電腦程式的執行就是就是一系列訊息在各個對象之間傳遞。主要應用在需求經常變化的軟體,一般需求的變化都集中在使用者層,互連網應用,企業內部軟體,遊戲等
優點:解決了程式的可擴充性差的問題,對某一個對象修改會立刻反映到整個程式體系
缺點:可控性差,無法預測程式執行結果
類和對象
對象的概念
對象也叫做執行個體,是通過類產生的,對象就是資料屬性和方法屬性的結合體,比如lol中的英雄,一個英雄就是一個對象,具備生命值、藍條攻擊力等資料屬性,又具備qwer四個技能屬於方法屬性。
類的概念
類包含了一組對象的相同屬性部分,比如遊戲人物,所有的人物都有名字、標籤(坦克戰士法師)、生命值、藍條攻擊力等,雖然具體的值不同,但是都可以包含在類中去產生。
在python中,用變數表示是資料屬性,用函數表示方法屬性。
在現實生活中,先有對象後有類,比如先有的人,後有的人類的概念,而在編程中,是先有的類,後有的對象,類產生對象。
聲明一個類:和函數的定義類似
定義函數:通過def關鍵字
定義類:通過class關鍵字
‘‘‘class 類名: 資料屬性 方法屬性‘‘‘class Style: pass
class Chinese: country=‘china‘ #資料屬性 def __init__(self,name,color,age): #init函數一定不能有傳回值,只能初始化 if not isinstance(name,str): raise TypeError self.name=name #p1.name=‘xiaobai‘ self.color=color #p1.color=‘yellow‘ self.age=age #p1.age=22 def talk(self): #函數屬性 print(‘%s is talking‘%self.name) def eat(self): print(‘is eating‘) def laugh(self): print(‘is laughing‘)#執行個體化:__init__(p1,name,color,age)p1=Chinese(‘xiaobai‘,‘yellow‘,22)p2=Chinese(‘xiaohei‘,‘yellow‘,25)print(Chinese.__dict__)#使用__dict__查看Chinese類下的屬性print(p1.__dict__)#使用__dict__查看Chinese對象執行個體化p1下的屬性p1.talk()
print(Chinese.country,id(Chinese.country))
print(p1.country,id(p1.country))
執行結果
{‘__module__‘: ‘__main__‘, ‘country‘: ‘china‘, ‘__init__‘: <function Chinese.__init__ at 0x0000024C5D9CB9D8>, ‘talk‘: <function Chinese.talk at 0x0000024C5D9CBA60>, ‘eat‘: <function Chinese.eat at 0x0000024C5D9CBAE8>, ‘laugh‘: <function Chinese.laugh at 0x0000024C5D9CBB70>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Chinese‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Chinese‘ objects>, ‘__doc__‘: None} #Chinese.__dict__
{‘name‘: ‘xiaobai‘, ‘color‘: ‘yellow‘, ‘age‘: 22} #p1.__dict__
xiaobai is talking #p1.talk()
china 2906932484504 #print(Chinese.country,id(Chinese.country))
china 2906932484504 #print(p1.country,id(p1.country))
從執行結果中可以看出類有資料屬性和函數屬性,對象只有資料屬性。對象有著類所沒有的資料屬性,並且對象有著類中共同的資料屬性和函數屬性。
python物件導向類