面向對象入門(封裝)
編程的方式:
·面向過程:根據業務邏輯從上到下壘代碼
·函數式:將某功能代碼封裝到函數中,通過調用函數來簡潔代碼
·面向對象:對函數進行分類和封裝,讓開發變得“更好、更快、更強”
面向對象編程(object oriented programming)OOP
這種編程方式的落地需要使用"類"和"對象"來實現,所以面向對象編程其實就是對"類"和"對象"的使用。
類(class)
"類"就是一個模板,模板裏可以包含多個函數,"類"中的函數叫做"方法"
對象(object)
"對象"是根據模板創建的實例,通過實例對象可以執行類中的"方法"
面向對象的三大特征:
1、封裝
2、繼承
3、多態
一、封裝
將內容封裝到某個地方,以後再去調用被封裝在某處的內容
所以,在使用面向對象的封裝特性時,需要註意兩點
·將內容封裝到某處
·從某處調用被封裝的內容
第一步,將內容封裝到某處
1 class Foo: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 # 根據類Foo創建對象 12 13 14 15 obj1 = Foo("Alben",18) 16 17 18 19obj2 = Foo("Nichole",30)
self 是一個形參,
·當執行obj1 = Foo("Alben" , 18)時,self = obj1
·當執行obj2 = Foo("Nichole" , 30)時,self = obj2
所以,內容被封裝到了對象obj1和obj2中,每個對象中都有name和age屬性,在內存中的對應關系:
第二步:從某處調用被封裝的內容
調用被封裝的內容時,有兩種情況:
·通過對象直接調用
·通過self間接調用
通過對象直接調用:
print(obj1.name)
print(obj2.name)
通過self間接調用:
通常,調用"類"中封裝的"方法"的時候,通常使用self間接調用——
1 class Foo: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 def detail(self): 12 13 print(self.name) 14 15 print(self.age) 16 17 18 19 obj1 = Foo("Alben",18) 20 21 22 23 obj1.detail() 24 25
#在執行的時候,Python會將obj傳遞給參數self,即obj1.detail(obj1)。
綜上所述,對於面向對象的封裝來說,其實就是使用構造方法將內容封裝到對象中,然後通過對象直接或self間接的方式獲取封裝的內容。
練習:
在終端輸出一下內容
王順,10歲看黃片
王順,10歲擼管
王順,10歲逛窯子
熊雞雞,10歲看黃片
熊雞雞,10歲擼管
熊雞雞,10歲逛窯子
函數式:
1 def kanhuangpian(name,age): 2 3 print(name +‘, ‘ + age + "歲看黃片") 4 5 6 7 def luguan(name,age): 8 9 print(name + ‘, ‘ + age + "歲擼管") 10 11 12 13 def guangyaozi(name,age): 14 15 print(name + ‘, ‘ + age + "歲逛窯子") 16 17 18 19 20 21 name1 = "王順" 22 23 name2 = "熊GG" 24 25 age1 = str(10) 26 27 28 29 kanhuangpian(name1,age1) 30 31 luguan(name1,age1) 32 33 guangyaozi(name1,age1) 34 35 36 37 kanhuangpian(name2,age1) 38 39 luguan(name2,age1) 40 41 guangyaozi(name2,age1)
OOP式:
1 class People: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 def huangpian(self): 12 13 print("%s , %d歲看黃片!" % (self.name,self.age)) 14 15 16 17 def luguan(self): 18 19 print("%s , %d歲擼管!" % (self.name,self.age)) 20 21 22 23 def yaozi(self): 24 25 print("%s , %d歲逛窯子!" % (self.name,self.age)) 26 27 28 29 obj1 = People("王順",10) 30 31 obj2 = People("熊GG",10) 32 33 34 35 obj1.huangpian() 36 37 obj1.luguan() 38 39 obj1.yaozi() 40 41 42 43 obj2.huangpian() 44 45 obj2.luguan() 46 47 obj2.yaozi()
面向對象入門(封裝)