一. 面向對象初識
我們在生活中做事都是面向過程的,前面實現一些基本邏輯功能代碼也是用面向過程的語句實現的,后來學了函數,把這些功能又裝到了函數里。但用面向過程的方法去寫程序,只能實現一個功能,我們要實現很多功能時,需要寫很多個代碼塊,每一個代碼塊的作用域都是全局的,要相對一個功能進行改動,還要考慮與其它代碼塊的聯系,這樣就造成了代碼的可擴展性和維護性。那么裝到函數里就好了嗎?裝到函數里變量只能作用於函數里,其他的函數無法使用到該函數的變量。這時可以用面向對象的程序設計方法解決這些問題。面向對象的核心是對象,用對象來操控類里面的方法(函數)和變量,加上類還具有繼承、封裝、多態三大特性,提高了代碼的復用性和規范性。
二. 類,對象
1. 類
語法: class 類名:
類體
類體:兩部分:變量部分(靜態變量),方法(函數)部分
#定義一個類 class name: pass
2. 對象
類名()就是對象, 類名()的這個過程:實例化的過程(創建一個對象的過程),
class name: pass name() # 對象創建
三. 類,對象調用類中的變量和方法.
1. 類調用類中的變量和方法
(1) __dict__方法(操作類中的靜態變量):只能查詢不能增、刪、改。
class Person: mind = '有思想' belif = '有信仰' animal = '高級動物' print(Person.__dict__) # 查詢類Person中所有的內容,展現形式是字典. print(Person.__dict__['belif']) # 查詢類Person中的變量'belif' # Person.__dict__['belif'] = '無信仰' # 修改變量'belif'的值會報錯
(2). 萬能的點: .
class Person: mind = '有思想' belif = '有信仰' animal = '高級動物' def work(): print('666') def money(): print('777') print(Person.animal) # 高級動物 print(Person.mind) # 有思想 Person.mind = '沒有思想' # 修改變量'mind'的值,可以通過Person.__dict__查看修改后的內容 Person.pay = '貨幣交換' # 增加變量'pay'和它的值,可以通過Person.__dict__查看增加后的內容 Person.say = '語言交流' print(Person.work()) # 也可以調用類中的方法(函數),一般不用類名去操作 print(Person.__dict__) # 查看類中所有的內容
2. 對象調用類中的變量和方法
__init__方法是一個特殊的方法,只要類名+() 產生一個對象,自動執行類中的__init__方法,並把類的地址傳給方法里的第一個參數,約定把第一個參數定為'self', 再給對象封裝相應的屬性.
(1) __dict__ 查詢對象中的所有的內容
(2) 萬能的點: .
class Person: mind = '有思想' belif = '有信仰' animal = '高級動物' def __init__(self, name,age,hobby): self.name = name self.age = age self.hobby = hobby print(name,age,hobby) def work(self): print('會工作') return self def money(self): print('會消費') print(self) ret = Person('jack',22, '敲鍵盤') # 類名+() 的這個過程:實例化的過程(創建一個對象的過程) # jack 22 敲鍵盤
print(ret) # Person()創建一個對象空間,把這個空間的地址賦值給ret # <__main__.Person object at 0x0000021248F46550>
print(ret.__dict__) # 查詢對象中所有的內容: {'name': 'jack', 'age': 22, 'hobby': '敲鍵盤'} print(Person.work(111)) # 調用方法,並把111傳給self,(一般通過對象調用類的方法,而不是類)
# 會工作 # 111 # print(Person.money()) 類調用方法時不傳參數會報錯
ret.work() # 對象可以直接調用類中的方法不用給self傳參 # 會工作