• 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   #返回字典
    
    
    #################################################################################################################
    # 至此,面向对象编程基本引出:类和对象
    #    类:就是数据属性和方法属性的集合。
    #    对象:只包含自身的数据属性,具有类的方法,初始化时就创建了一个对象。
    View Code
  • 相关阅读:
    mysql中的乱码总结之mysql5中四个设置字符集的系统变量
    在Flash中添加“设为首页”“加为收藏”
    解决Flash影片中的图片抖动锯齿
    Mysql时间格式转换
    PHP 判断常量,变量和函数是否存在
    电子商务专业课内容及就业方向和情况
    商业化与非商业化
    KMP算法与一个经典概率问题
    KMP算法
    libevent 在window环境编译
  • 原文地址:https://www.cnblogs.com/Zhouzg-2018/p/10277549.html
Copyright © 2020-2023  润新知