1、概述編程
2、建立類和對象函數
面向對象編程是一種編程方式,此編程方式的落地須要使用 「類」 和 「對象」 來實現,因此,面向對象編程其實就是對 「類」 和 「對象」 的使用。spa
類就是一個模板,模板裏能夠包含多個函數,函數裏實現一些功能code
對象則是根據模板建立的實例,經過實例對象能夠執行類中的函數對象
#建立類
class Dog(object): def __init__(self,name): #構造函數,構造方法 ==初始化方法 self.NAME = name def sayhi(self): #類的方法 print("hello , I am a dog. my name is", self.NAME ) def eat(self,food): print("%s is eating %s" %(self.NAME,food)) print(Dog) d = Dog("LiChang") # Dog(d,"LiChang") #實例化後產生的對象 叫 實例 , d2 = Dog("Chuang2") #根據Dog 建立對象 d.sayhi() d2.sayhi() d.eat("baozi")
總結:函數式的應用場景 --> 各個函數之間是獨立且無共用的數據blog
面向對象的三大特性是指:封裝、繼承和多態。繼承
1、封裝內存
封裝,顧名思義就是將內容封裝到某個地方,之後再去調用被封裝在某處的內容。開發
因此,在使用面向對象的封裝特性時,須要:it
第一步:將內容封裝到某處
self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等於 obj1
當執行 obj2 = Foo('alex', 78 ) 時,self 等於 obj2
因此,內容其實被封裝到了對象 obj1 和 obj2 中,每一個對象中都有 name 和 age 屬性,在內存裏相似於下圖來保存。
第二步:從某處調用被封裝的內容
調用被封裝的內容時,有兩種狀況:
一、經過對象直接調用被封裝的內容
上圖展現了對象 obj1 和 obj2 在內存中保存的方式,根據保存格式能夠如此調用被封裝的內容:對象.屬性名
class Foo: def __init__(self, name, age): self.name = name self.age = age obj1 = Foo('wupeiqi', 18) print(obj1.name) # 直接調用obj1對象的name屬性 print(obj1.age) # 直接調用obj1對象的age屬性 obj2 = Foo('alex', 73) print(obj2.name) # 直接調用obj2對象的name屬性 print(obj2.age) # 直接調用obj2對象的age屬性
二、經過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 是 18 obj2 = Foo('alex', 73) obj2.detail() # Python默認會將obj2傳給self參數,即:obj1.detail(obj2),因此,此時方法內部的 self = obj2,即:self.name 是 alex ; self.age 是 78