python-32: 面向对象设计(object oriented design,OOD)
#面向对象设计引出 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 #返回字典 ################################################################################################################# # 至此,面向对象编程基本引出:类和对象 # 类:就是数据属性和方法属性的集合。 # 对象:只包含自身的数据属性,具有类的方法,初始化时就创建了一个对象。