優勢:極大的下降了寫程序的複雜度,只須要順着要執行的步驟,堆疊代碼便可函數
缺點:一套流水線或者流程就是用來解決一個問題,代碼牽一髮而動全身spa
應用場景:一旦完成基本不多改變的場景。例Linux內核,Git以及apcaApache HTTPserserver等設計
優勢:解決了程序的可擴展性,對某一個對象單獨修改,會馬上反映到整個體系中,例:對遊戲中一我的物參數的特徵和技能修改都很容易指針
缺點:可控性差(結果預測性差),沒法向面向過程的程序設計流水線式的能夠很精準的預測問題的處理流程與結果。code
1.函數封裝一個功能,而面向對象封裝多個相關的功能server
2.面對對象比較抽象,它是一種思想,須要站在上帝的角度去理解對象
3.程序可擴展性,對象都是一個個獨立的,耦合性,差別性blog
class A: #定義一個類 name = 'alex' # 靜態屬性,靜態變量,靜態字段。 def func1(self): # 函數,動態屬性,方法。 pass
class Person: #定義一我的類 role = 'person' #人的角色屬性都是人 def walk(self): #人均可以走路,也就是有一個走路方法 print("person is walking...") print(Person.role) #查看人的role屬性 print(Person.walk) #引用人的走路方法,注意,這裏不是在調用
1.__dict__ 做用:查看類中的全部全部屬性和方法,不能夠進行增刪改遊戲
class Person: animal = '高級動物' def work(self): print('人類都須要工做。。。') print(Person.__dict__) #類中的屬性 print(Person.__dict__["animal"]) #經過__dict__方式 單獨的屬性及方法能夠查,可是不能增刪改
2.查看,(增刪改)類中某個,某些屬性 用萬能的點內存
print(Person.animal) # 查 # print(Person.language) # Person.name = 'alex' # 增 # print(Person.name) # Person.animal = '低級動物' # 改 # del Person.walk_way # 刪 # print(Person.__dict__)
注意:能夠經過Person.__dict__["work"](1)來執行類中的動態屬性(方法),可是不建議這麼作
實例化過程內部經歷三個階段:
1.在類名後加上一個括號Person(「alex」,"man"),就會在內存中開闢一個對象空間
2.自動執行類中__init__方法,而且將對象空間自動傳給self參數,其餘參數(「alex」,"man")手動傳入
3.執行__init__方法,給對象空間封裝相應的屬性
class Person: #定義一我的類 role = 'person' #人的角色屬性都是人 def __init__(self,name,sex): self.name = name # 每個角色都有本身的暱稱; self.sex = sex #每一個人都有本身的性別 def walk(self): #人均可以走路,也就是有一個走路方法 print("person is walking...") egg = Person("alex","man") #具體實例化,建立具體的一我的物 print(egg.name) #查看對象的名字 print(Person.role) #查看人的role屬性 print(Person.walk) #引用人的走路方法,注意,這裏不是在調用
對象操做對象空間:
對象參看對象空間的全部屬性 用__dict__
對象操做對象的某個屬性 用萬能的點進行增改 使用del 進行刪除屬性
對象操做類空間的屬性:只能進行查
對象操做類空間的方法(動態屬性)
class Person: animal = '高級動物' def __init__(self,name,sex): self.name = name self.sex = sex def work(self): print('人類都須要工做。。。') obj = Person("alex","man") print(obj.__dict__) #查對象空間的屬性 obj.name = "taibai" #對象空間屬性的改 obj.hobby = "打球" #對象空間屬性的增 del obj.sex #將對象空間的sex屬性刪除 print(obj.animal) #對象空間查看類空間中的屬性 obj.work() #對象操做類空間的方法
1.對象空間爲何能調用類中的屬性與方法,只能調用不能改變
對象空間先從本身空間中找屬性,對象空間沒有此屬性就會經過類對象指針從類中去找,若是類中找不到,會從父類中去找。
對象只能查看類中的屬性,不能對類中的屬性進行增刪改。
2.類不能調用對象的屬性。
3.對象與對象之間不能夠互相調用。
同一類實例化出來的對象之間是不能互相訪問的。可是不一樣類實例化的對象是有可能進行互相訪問的
4.給對象封裝屬性:__init__ 任意位置