• python的面向对象-面向对象设计


    1、面向对象设计

    def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
        #学校动作
        def kaoshi(school):
            print("[%s]学校正在考试" %school["name"])
        def zhaosheng(school):
            print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
        #学校特征
        sch = {
            "name": name,
            "addr": addr,
            "type": type,
            "kaoshi":kaoshi,
            "zhaosheng":zhaosheng,
        }
        return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
    s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
    print(s1)
    s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
    s2=school("北大","北京","公立")
    print(s2)
    s2["zhaosheng"](s2)
    
     
    C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py
    
    {'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22400>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22378>, 'addr': '北京', 'name': '清华'}
    
    [清华]学校正在考试
    
    {'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22510>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22488>, 'addr': '北京', 'name': '北大'}
    
    [公立]学校[北大]正在招生

    2、定义一个init初始化函数,但是不够好,

    def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
        #学校动作
        def kaoshi(school):
            print("[%s]学校正在考试" %school["name"])
        def zhaosheng(school):
            print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
        #学校特征
        def init(name,addr,type):
            sch = {
                "name": name,
                "addr": addr,
                "type": type,
                "kaoshi": kaoshi,
                "zhaosheng": zhaosheng,
            }
            return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
        res=init(name,addr,type)#上面定义了3个子函数,但是没有运行,res是在运行init
        return res#然后把字典这个结果作为school这个大函数的返回值
    s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
    s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
    s2=school("北大","北京","公立")
    s2["zhaosheng"](s2)
    
    C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py
    
    [清华]学校正在考试
    
    [公立]学校[北大]正在招生

    3、可以把上面的res这2行合并为一行

    运行school函数,把3个def子函数加载到内存中,然后运行init初始化函数,把结果(结果是一个字典)作为school的返回值返回

    def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
        #学校动作
        def kaoshi(school):
            print("[%s]学校正在考试" %school["name"])
        def zhaosheng(school):
            print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
        #学校特征
        def init(name,addr,type):
            sch = {
                "name": name,
                "addr": addr,
                "type": type,
                "kaoshi": kaoshi,
                "zhaosheng": zhaosheng,
            }
            return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
        return init(name,addr,type)
    s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
    s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
    s2=school("北大","北京","公立")
    s2["zhaosheng"](s2)
    
    C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py
    
    [清华]学校正在考试
    
    [公立]学校[北大]正在招生

    4、上面这样还不够好,因为init初始化函数一般都是放在最前面的,我们开始的时候放在前面会报错,因为找不到kaoshi和zhaosheng,现在放在前面是可以的了,因为def只是定义函数,并没有运行,到最下面的时候运行的时候这时候zhaosheng和kaoshi已经加载到内存中了

    def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
        def init(name,addr,type):#初始化
            sch = {
                "name": name,
                "addr": addr,
                "type": type,
                "kaoshi": kaoshi,
                "zhaosheng": zhaosheng,
            }
            return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
        #学校动作
        def kaoshi(school):
            print("[%s]学校正在考试" %school["name"])
        def zhaosheng(school):
            print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
        #学校特征
        return init(name,addr,type)
    s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
    s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
    s2=school("北大","北京","公立")
    s2["zhaosheng"](s2)
    
    C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py
    
    [清华]学校正在考试
    
    [公立]学校[北大]正在招生

    5、面向对象编程就是用class独特的语法去实现面向对象设计

    #用面向对象编程独有的语法class去实现面向对象设计

    class Dog:
        def __init__(self,name,gender,type):
            self.name=name
            self.gender=gender
            self.type=type
        def bark(self):
            print('一条名字为[%s]的[%s],狂吠不止' %(self.name,self.type))
        def yao_ren(self):
            print('[%s]正在咬人' %(self.name))
        def chi_shi(self):
            print('[%s]正在吃屎' %(self.type))
    dog1=Dog('beiye','female','京巴')
    print(dog1.__dict__)
    
     
    {'gender': 'female', 'type': '京巴', 'name': 'beiye'}
  • 相关阅读:
    SSH中使用延迟加载报错Exception occurred during processing request: could not initialize proxy
    SSH整合方案二(不带hibernate.cfg.xml)
    SSH整合方案一(带有hibernate.cfg.xml)
    hibernate4整合spring3出现java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;
    jquery实现图片上传前的预览
    EL11个内置对象
    linux修改主机名,关闭图形化界面,绑定ip地址,修改ip地址
    VMTurbo:应对散乱虚拟机的强劲工具
    虚拟架构与云系统监控与管理解决方案
    VMTurbo采用红帽企业虚拟化软件
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9190514.html
Copyright © 2020-2023  润新知