python學習 day18
阿新 • • 發佈:2019-01-14
面向物件初識
### 面向過程:
# 例1:
s1 = '字元zifu' count = 0 for i in s1: count += 1 # 例2: l1 = [1, 2, 3, 4] count = 0 for j in l1: count += 1
### 函式
def func(s): count = 0 for i in s: count += 1 return count
### 函式
1 # auth: 2 def login(): 3 pass 4 def regisgter():5 pass 6 7 # account: 8 def func1(): 9 pass 10 def func2(): 11 pass 12 13 # shoppingcar: 14 def shopping(username,money): 15 pass 16 def check_paidgoods(username,money): 17 pass 18 def check_unpaidgoods(username,money): 19 pass 20 def save(username,money): 21 pass
### 面向物件:面向物件是一類相似功能函式的集合體。
1,第一個優點: 更清晰化,更規範化。
2,面向物件,必須要站在上帝的角度,去考慮問題。類,其實就是一個公共模板;物件,就從具體的模板例項化出來。
# auto class LoginHandler: def login(self): pass def regisgter(self): pass # account class Account: def func1(self): pass def func2(self):pass # 購物車 class ShoppingCar: def shopping(username,money): pass def check_paidgoods(username,money): pass def check_unpaidgoods(username,money): pass def save(username,money): pass
# 面向物件的結構 ''' class 類名(): 變數 函式(方法) '''
例:
class Human: """ 此類主要是構建人類 """ mind = '會思想' # 靜態屬性 屬性 靜態變數 靜態欄位 language = '使用文字' # dic = {} # l1 = []
def __init__(self,name,sex,age,hobby): # 方法 函式 動態屬性 # print(self,name,sex,age,hobby) # print(666) self.n = name self.s = sex self.a = age self.h = hobby def work(self): print(self) print('人類會工作') def tools(self): # self.color = 'blue' print('人類都會使用工具')
### 類名
1)類名操作類中的靜態屬性
第一種:# 查,“ 類名.__dict__ ”(Human.__dict__)檢視類中所有內容時使用。
print(Human.__dict__) # 檢視類中所有內容 ''' {'__module__': '__main__', '__doc__': '\n 此類主要是構建人類\n ', 'mind': '有思想', 'language': '實用語言',
'__init__': <function Human.__init__ at 0x0000024F6ABCD9D8>, 'work': <function Human.work at 0x0000024F6ABCDA60>,
'tools': <function Human.tools at 0x0000024F6ABCDAE8>, '__dict__': <attribute '__dict__' of 'Human' objects>,
'__weakref__': <attribute '__weakref__' of 'Human' objects>} ''' print(Human.__dict__['mind']) # 檢視 靜態變數 mind 中的內容 # 有思想 Human.__dict__['mind'] = '無腦' # 無法對類中內容進行更改,否則報錯 print(Human.__dict__)
第二種:萬能的 “ . ” 可以增刪改查類中的靜態屬性。
Human.walk = '直立行走' ### 增 # 增加了 walk=‘直立行走’ 的屬性 print(Human.walk) del Human.mind ### 刪 # 將 mind = ‘有思想’ 屬性刪除
Human.mind = '思維zhang' ### 改 print(Human.mind) # mind = ‘有思想’ 改為了 mind = ‘思維zhang’ print(Human.mind) ### 查 # mind = ‘思維zhang’
2)類名操作類中的方法(除去特殊方法:靜態方法,類方法之外,一般不會通過類名執行類中的方法)。
方法: “ 類名.方法名(引數) ” <---> Human.work(1231)
Human.work(1231) # 1222 # 人類會工作 Human.tools(111)
# 人類都會使用工具
### 物件
---- “ 類名()” 這是一個例項化過程,就會產生一個物件。
例:obj = Human() 產生了一個例項化物件 obj
obj = Human # 例項化一個過程
例項化一個物件需要經歷的3件事情(即 例項化一個物件的過程):
1)產生一個空的物件空間。
print(obj) # <__main__.Human object at 0x0000019BC6A0F828>
2)自動執行類中的 __init__ 方法並且將這個空的物件空間傳給 self 。
print(obj)
3)在 __init__ 中通過self給這個空間新增屬性。
obj = Human('小胖', '男', 20, '女') print(obj.__dict__) # {'n': '小胖', 's': '男', 'a': 20, 'h': '女'}
# 物件 操作 物件空間 的屬性
obj = Human('小胖','男',20,'女') # 例項化物件
1)" obj.__dict__ " 查詢物件中所有的屬性
print(obj.__dict__) # {'n': '小胖', 's': '男', 'a': 20, 'h': '女'}
2)通過萬能的 " . " 的方式操作物件中的單個屬性。
obj.job = 'IT' # 增 del obj.n # 刪 obj.s = '女' # 改 print(obj.s) print(obj.__dict__) # 查
3)物件可以查詢類中的屬性。
print(obj.mind) # 查詢 mind = “會思想” print(obj.language) # 查詢 language = “使用語言”
print(obj.a) # 查詢 a = 20
obj.a = 666 print(obj.a) # 改 a = 666
4)物件可以執行類中的方法。
物件執行類中的所有方法(除去3個特殊方法)Python直譯器都會將物件空間主動傳給方法的第一個引數self。
print(obj) # <__main__.Human object at 0x00000284476FBCF8> obj.work() # <__main__.Human object at 0x00000284476FBCF8> # 人類會工作
self:類中方法的第一個形參 約定俗成 寫 self 便於統一,self 接受的就是 物件空間。
1 class Human: 2 """ 3 此類主要是構建人類 4 """ 5 mind = '會思想' # 靜態屬性 屬性 靜態變數 靜態欄位 6 language = '使用文字' 7 # dic = {} 8 # l1 = [] 9 def __init__(self,name,sex,age,hobby): # 方法 函式 動態屬性 10 # print(self,name,sex,age,hobby) 11 # print(666) 12 self.n = name 13 self.s = sex 14 self.a = age 15 self.h = hobby 16 17 def work(self): 18 print(self) 19 print('人類會工作') 20 21 def tools(self): 22 # self.color = 'blue' 23 print('人類會使用工具') 24 print('猩猩會使用工具') 25 print('猴子會使用工具')
obj = Human('小胖', '男', 20, '女') print(obj.__dict__) # {'n': '小胖', 's': '男', 'a': 20, 'h': '女'} obj.tools()
# 人類會使用工具
# 猩猩會使用工具
# 猴子會使用工具
print(obj.__dict__) # {'n': '小胖', 's': '男', 'a': 20, 'h': '女'}
self = [1,2,3] self.append(666) obj = self print(obj, self) # [1, 2, 3, 666] [1, 2, 3, 666] self.append(777) obj.append(888) print(obj, self) # [1, 2, 3, 666, 777, 888] [1, 2, 3, 666, 777, 888]
# 多個物件
# 多個物件 # xiaopang = Human('小胖','男',20,'美女') # xiangye = Human('相爺','男',18,'肥女') # print(xiangye,xiaopang) # print(xiaopang.__dict__) # print(xiangye.__dict__)
# 例1: