標籤:複雜 __init__ 基本 pac 不能 man 括弧 查看類 訪問
初識物件導向: 面向過程:
優點:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊代碼即可
缺點:一套流水線或者流程就是用來解決一個問題,代碼牽一髮而動全身
應用情境:一旦完成基本很少改變的情境。例Linux核心,Git以及apcaApache HTTPserserver等
物件導向:
優點:解決了程式的可擴充性,對某一個對象單獨修改,會立刻反映到整個體系中,例:對遊戲中一個人物參數的特徵和技能修改都很容易
缺點:可控性差(結果預測性差),無法向面向過程的程式設計流水線式的可以很精準的預測問題的處理流程與結果。
函數與物件導向:
1.函數封裝一個功能,而物件導向封裝多個相關的功能
2.面對對象比較抽象,它是一種思想,需要站在上帝的角度去理解
3.程式可擴充性,對象都是一個個獨立的,耦合性,差異性
類 :指具有相同屬性或者功能的一類實物(例人類,爬行類)對象:是類的具體體現 結構上理解:面對對象:倆部分
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)來執行類中的動態屬性(方法),但是不建議這麼做
執行個體化:類 名後加上括弧,就會觸發__init__(一種特殊函數)函數的運行,可以用它來為每個執行個體定製自己的特徵
執行個體化過程內部經曆三個階段:
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__ 任意位置
騎士計劃-python全棧 15 面對對象初識