面向對象初級篇

1、概述編程

  • 面向過程:根據業務邏輯從上到下寫壘代碼
  • 函數式:將某功能代碼封裝到函數中,往後便無需重複編寫,僅調用函數便可
  • 面向對象:對函數進行分類和封裝,讓開發「更快更好更強...」

2、建立類和對象函數

面向對象編程是一種編程方式,此編程方式的落地須要使用 「類」 和 「對象」 來實現,因此,面向對象編程其實就是對 「類」 和 「對象」 的使用。spa

  類就是一個模板,模板裏能夠包含多個函數,函數裏實現一些功能code

  對象則是根據模板建立的實例,經過實例對象能夠執行類中的函數對象

  

  • class是關鍵字,表示類
  • 建立對象,類名稱後加括號便可

  

#建立類
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 屬性,在內存裏相似於下圖來保存。

第二步:從某處調用被封裝的內容

調用被封裝的內容時,有兩種狀況:

  • 經過對象直接調用
  • 經過self間接調用

一、經過對象直接調用被封裝的內容

上圖展現了對象 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
相關文章
相關標籤/搜索