#面向對象設計引出 dog1={ #定義一條狗的數據屬性,以字典類型保存--->至關於對象的數據屬性,在對象__dict__字典裏,對象__dict__字典只包含數據屬性 'name':'hly', 'gender':'公', 'type':'京巴' } def bark(dog): #定義方法屬性---->至關於類的方法屬性,在類的__dict__字典裏,類的__dict__字典,包含類的數據屬性和方法屬性 print('一條名叫%s狗正在叫。。。'%dog['name']) def bite(dog): print('一條%s狗正在咬人。。。'%dog['type']) person1={ #定義人的屬性 'name':'小明', 'gender':'公' } bite(dog1) bark(person1)#一條名叫小明狗正在叫。。。--->若是這樣,人也能調用狗的方法了,問題關鍵是:狗沒有將狗的方法綁定,沒有將屬性和方法綁定在一塊兒 #方法一:很是low============================================================================================= dog1.update({'shuxing':'dog'})#給狗的字典加一個屬性,shuxing=dog def bark(dog): #重構狗的每一個方法,加判斷 if dog.get('shuxing')=='dog': #dog.get(key),key不存在時,返回none, print('一條%s狗正在咬人。。。'%dog['type']) else: print('這不是狗,沒有狗的屬性') bark(person1) bark(dog1) #方法二:方法和對象綁定死了,不行============================================================================ def dog(): def bark(dog): #定義方法屬性---->至關於類的方法屬性,在類的__dict__字典裏,類的__dict__字典,包含類的數據屬性和方法屬性 print('一條名叫%s狗正在叫。。。'%dog['name']) def bite(dog): print('一條%s狗正在咬人。。。'%dog['type']) dog2={ #定義一條狗的數據屬性,以字典類型保存--->至關於對象的數據屬性,在對象__dict__字典裏,對象__dict__字典只包含數據屬性 'name':'hly', 'gender':'公', 'type':'京巴', 'bark':bark, #函數名也是變量,這樣屬性和方法就綁定在一個字典裏了 'bite':bite } return dog2 #返回字典 d=dog()#返回dog2的字典 print(d)#{'name': 'hly', 'gender': '公', 'type': '京巴', 'bark': <function dog.<locals>.bark at 0x01CAE8E8>, 'bite': <function dog.<locals>.bite at 0x01CAE8A0>} d['bark'](d)#執行'bark'方法,但只能運行一條狗的方法,這樣綁定死了,不是動態綁定 #方法三:動態綁定============================================================================ def dog(name,gender,type): def bark(dog): #定義方法屬性---->至關於類的方法屬性,在類的__dict__字典裏,類的__dict__字典,包含類的數據屬性和方法屬性 print('一條名叫%s的狗正在汪汪叫。。。'%dog['name']) def bite(dog): print('一條%s狗正在咬人。。。'%dog['type']) dog2={ #定義一條狗的數據屬性,以字典類型保存--->至關於對象的數據屬性,在對象__dict__字典裏,對象__dict__字典只包含數據屬性 'name':name, 'gender':gender, 'type':type, 'bark':bark, #函數名也是變量,這樣屬性和方法就綁定在一個字典裏了 'bite':bite } return dog2 #返回字典 d1=dog('小豬','母','哈巴')#返回dog2的字典 d2=dog('小貓','公','狗屁') d1['bark'](d1)#執行'bark'方法,動態綁定 d2['bite'](d2)#執行'bite'方法,動態綁定 #方法四:優化代碼,使邏輯明瞭==================================================== def dog(name,gender,type): def bark(dog): #定義方法屬性---->至關於類的方法屬性,在類的__dict__字典裏,類的__dict__字典,包含類的數據屬性和方法屬性 print('一條名叫%s的狗正在汪汪叫。。。'%dog['name']) def bite(dog): print('一條%s狗正在咬人。。。'%dog['type']) def init(name,gender,type): dog2={ #定義一條狗的數據屬性,以字典類型保存--->至關於對象的數據屬性,在對象__dict__字典裏,對象__dict__字典只包含數據屬性 'name':name, 'gender':gender, 'type':type, 'bark':bark, #函數名也是變量,這樣屬性和方法就綁定在一個字典裏了 'bite':bite } return dog2 res=init(name,gender,type) return res #返回字典 ################################################################################################################# # 至此,面向對象編程基本引出:類和對象 # 類:就是數據屬性和方法屬性的集合。 # 對象:只包含自身的數據屬性,具備類的方法,初始化時就建立了一個對象。