一.面向對象的概念 面向對象編程(Object-oriented Programming,簡稱 OOP),是一種封裝代碼的方法 為什麼要有面向對象:是為了更好地模擬現實世界的事物,並把描述特征的數據和代碼塊(函數)封裝到一起 比如說,將亂七八糟的數據扔進列表中,這就是一種簡單的封裝,是數據層面的封裝 ...
一.面向對象的概念
面向對象編程(Object-oriented Programming,簡稱 OOP),是一種封裝代碼的方法
為什麼要有面向對象:是為了更好地模擬現實世界的事物,並把描述特征的數據和代碼塊(函數)封裝到一起
比如說,將亂七八糟的數據扔進列表中,這就是一種簡單的封裝,是數據層面的封裝;把常用的代碼塊打包成一個函數,這也是一種封裝,是語句層面的封裝。
class Person: #比如人有一些屬性,名字、性別、年齡等 name = "Mewtwo" sex = "男" age = 21 #人有一些行為動作或者說方法 def run(self): print("人會跑")#會跑 def shop(self): print("人會購物")#會購物 def sleep(self): print("人會睡覺")#會睡覺
面向對象中,常用術語包括:
- 類:可以理解是一個模板,通過它可以創建出無數個具體實例。比如,前面編寫的 tortoise 表示的只是烏龜這個物種,通過它可以創建出無數個實例來代表各種不同特征的烏龜(這一過程又稱為類的實例化)。
- 對象:類並不能直接使用,通過類創建出的實例(又稱對象)才能使用。這有點像汽車圖紙和汽車的關係,圖紙本身(類)並不能為人們使用,通過圖紙創建出的一輛輛車(對象)才能使用。
- 屬性:類中的所有變數稱為屬性。例如,tortoise 這個類中,bodyColor、footNum、weight、hasShell 都是這個類擁有的屬性。
- 方法:類中的所有函數通常稱為方法。不過,和函數所有不同的是,類方法至少要包含一個 self 參數(後續會做詳細介紹)。例如,tortoise 類中,crawl()、eat()、sleep()、protect() 都是這個類所擁有的方法,類方法無法單獨使用,只能和類的對象一起使用。
二.類的定義
Python 中使用類的順序是:先創建(定義)類,然後再創建類的實例對象,通過實例對象實現特定的功能。
如何創建一個類:
class 類名(每個單詞首字母大寫,單詞之間不用符號隔開):
零個到多個類屬性...(無先後順序之分,相互之間可以調用)
零個到多個類方法...(無先後順序之分,相互之間可以調用)
Python 的類定義由類頭(指 class 關鍵字和類名部分)和統一縮進的類體構成,在類體中最主要的兩個成員就是屬性和方法。如果不為類定義任何屬性和方法,那麼這個類就相當於一個空類,如果空類不需要其他可執行語句,則可使用 pass 語句作為占位符。但是空類沒有意義,所以比較少用
定義一個類
class Person : '''這是一個學習Python定義的一個Person類''' # 下麵定義了一個類屬性 hair = 'black' # 下麵定義了一個say方法 def say(self, content): print(content)
class 語句只能創建一個類,而無法創建類的對象,因此要想使用已創建好的類,還需要手動創建類的對象,創建類對象的過程又稱為類的實例化。
語法:類名(參數)
案例:
class Person : '''定義的一個Person類''' # 定義2個類變數 name = "Mewtwo" age = "22" def __init__(self,name,age): #定義2個實例變數 self.name = name self.age = age print("這個人的名字是:",name," 年齡為:",age) # 定義一個say實例方法 def say(self, content): print(content) # 將該Person對象賦給p變數 p = Person("Mewtwo",22)
類對象的使用
# 類名的角度 # # 操作類中的靜態變數 # # 1, Person.__dict__ 查詢類中的所有的內容 (不能進行增刪改操作) # print(Person.__dict__) # print(Person.__dict__['faith']) # Person.__dict__['mind'] = '無腦' # print(Person.__dict__['mind']) # 2, 萬能的 . 對類中的單個的變數進行增刪改查,用 萬能的 點 # print(Person.mind) # print(Person.animal) # 查 # Person.money = '運用貨幣' # 增 # Person.mind = '無腦的' # 改 # del Person.mind # print(Person.__dict__) # # #操作類中的方法 (工作中基本不用類名去操作) # # Person.work(111) # # # 對象的角度 # ret = Person() # 類名+()的這個過程:實例化的過程(創建一個對象的過程), # # Person() 實例化對象,實例,對象. # print(ret) # #1,只要類名+() 產生一個對象,自動執行類中的__init__方法. class Person: '''類體:兩部分:變數部分,方法(函數)部分''' mind = '有思想' # 變數,靜態變數,靜態欄位 animal = '高級動物' faith = '有信仰' def __init__(self,name,age,hobby): self.name = name # Person.money = '運用貨幣' self.age = age self.hobby = hobby def work(self): # 方法,函數,動態變數 print('%s都會工作...' %self.name) def shop(self): print('人類可以消費....') # 類名的角度 # 操作類中的靜態變數 # 1, Person.__dict__ 查詢類中的所有的內容 (不能進行增刪改操作) # print(Person.__dict__) # print(Person.__dict__['faith']) # Person.__dict__['mind'] = '無腦' # print(Person.__dict__['mind']) # 2, 萬能的 . 對類中的單個的變數進行增刪改查,用 萬能的 點 # print(Person.mind) # print(Person.animal) # 查 # Person.money = '運用貨幣' # 增 # Person.mind = '無腦的' # 改 # del Person.mind # print(Person.__dict__) #操作類中的方法 (工作中基本不用類名去操作) # Person.work(111) # 對象的角度 # ret = Person('alex',1000, 'oldwomen') # 類名+()的這個過程:實例化的過程(創建一個對象的過程), # Person() 實例化對象,實例,對象. # print(ret) #1, 類名+()產生一個實例(對象,對象空間.) #2, 自動執行類中的__init__方法,將對象空間傳給__init__的self參數, #3, 給對象封裝相應的屬性. # print(ret.__dict__) # 對象的角度 # 操作對象中的靜態變數 #1, __dict__ 查詢對象中的所有的內容 #2, 萬能的. 萬能的 點. # print(ret.name) # 查 # ret.high = 175 # 增 # del ret.name # 刪 # ret.age = 73 # 改 # print(ret.__dict__) # 對象操作類中的靜態變數 : 只能查詢. # print(ret.mind) # 對象調用類中的方法 (工作中 通過對象執行類中的方法,而不是通過類名) # ret.shop() # print(ret)
代碼是我看視頻的時候看到的,上面是我自己總結的,但是感覺面向對象學的有點懵逼,還沒完全懂