標籤:參數 com str 重點 tps 通過 女朋友 情況 href
在上一章節中,看書自學python-socket編程裡面發現很多問題,一個重點是不知道python的class是什麼,總是在百度每一句代碼是什麼意思,發現好像問題挺大的,萬一後面還出現了class怎麼辦,難道每一句百度???,果斷百度“python物件導向編程”,以下是學習python物件導向編程的一些心得,原文來自武沛齊,很多地方自己改了一下
大綱
1、建立類和對象
2、物件導向的三大特性
建立類和對象
物件導向編程是一種編程方式,此編程方式的落地需要使用 “類” 和 “對象” 來實現,所以,物件導向編程其實就是對 “類” 和 “對象” 的使用。
類就是一個模板,模板裡可以包含多個函數,函數裡實現一些功能
對象則是根據模板建立的執行個體,通過執行個體對象可以執行類中的函數
從知乎上面看到這樣一句話,不知道是對是錯,反正我理解不了,感覺太高深
“執行個體就是對象在記憶體中開闢了空間。
父母口中的女朋友(對象),懷裡摟著的她(執行個體)。”
建立一個類:
# 建立類class Foo:
#類中定義的函數叫方法 def Bar(self): #類中的函數第一個參數必須是self print("bar") def Hello(self, name): print("i am %s" % name)# 根據類Foo建立對象objobj = Foo() # 相當於拿到類裡面的所有方法(函數),當然,這是我自己得理解# Foo().Bar()obj.Bar() # 執行Bar方法obj.Hello("smelond") # 執行Hello方法
# 物件導向:【建立對象】【通過對象執行方法】
# 函數編程:【執行函數】
物件導向三大特性
一、封裝
封裝,顧名思義就是將內容封裝到某個地方,以後再去調用被封裝在某處的內容。
所以,在使用物件導向的封裝特性時,需要:
第一步:將內容封裝到某處
# 建立類class Foo: def __init__(self, name, age): # 稱為構造方法,根據類建立對象時自動執行 self.name = name self.age = age# 根據類Foo建立對象# 自動執行Foo類的__init__方法obj1 = Foo("wupeiqi", 18) # 將wupeiqi和16分別封裝到(obj1、self)的name和age屬性中# 根據類Foo建立對象# 自動執行Foo類的__init__方法obj2 = Foo("smelond", 16) # 將smelond和16分別封裝到(obj2、self)的name和age屬性中
self 是一個形式參數,當執行 obj1 = Foo(‘wupeiqi‘, 18 ) 時,self 等於 obj1
當執行 obj2 = Foo(‘alex‘, 78 ) 時,self 等於 obj2
所以,內容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在記憶體裡類似於來儲存。
第二步:從某處調用被封裝的內容
調用被封裝的內容時,有兩種情況:
1、通過對象直接調用被封裝的內容
調用方式:對象.屬性名稱
通過上面的代碼直接調用封裝的內容print(obj1.name)print(obj1.age)print(obj2.name)print(obj2.age)輸出wupeiqi18smelond16
2、通過self間接調用被封裝的內容
# 通過self間接調用class Foo: def __init__(self, name, age): self.name = name self.age = age def detail(self): print(self.name) print(self.age)obj1 = Foo(‘wupeiqi‘, 18)obj1.detail() # Python預設會將obj1傳給self參數,即:obj1.detail(obj1),所以,此時方法內部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18obj2 = Foo(‘smelond‘, 16)obj2.detail() # Python預設會將obj2傳給self參數,即:obj2.detail(obj2),所以,此時方法內部的 self = obj2,即:self.name 是 smelond ; self.age 是 17輸出:wupeiqi18smelond16
綜上所述,對於物件導向的封裝來說,其實就是使用構造方法將內容封裝到 對象 中,然後通過對象直接或者self間接擷取被封裝的內容。
Python物件導向的編程