反射

实例:

def login():
    print('炫酷登录页面')

def logout():
    print('炫酷推出页面')

def home():
    print('炫酷主页面')
View Code

import lib.commons as commons

def run():
    inp = input('请输入要访问的url:')
    if inp == 'login':
        commons.login()
    elif inp == 'logout':
        commons.logout()
    elif inp == 'home':
        commons.home()
    else:
        print('404')
if __name__ == '__main__':
    run()
View Code

为了解决commons因函数过多导致的ifel(判断)过多的问题:

def run():
    # account/login
    inp = input('请输入要访问的url:')
    # inp字符串类型 inp = "login"
    # commons.inp() # commons.login
    # 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员,反射
                                                    #hasattr,getattr,delattr,setattr
    if hasattr(commons, inp):  #检查commons用没有inp(输入)
        func = getattr(commons, inp) #从commons中得到inp(输入)赋值给func
        func()                                     #执行该函数
    else:
        print('404')
反射

也可以导入模块

def run():
    # account/login
    inp = input('请输入要访问的url:')
    # inp字符串类型 inp = "login"
    # commons.inp() # commons.login
    # 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员,反射

    m, f = inp.split('/')
    # import lib.account
    #无fromlist参数,只导入lib   
    obj = __import__("lib."+ m, fromlist=True)
    if hasattr(obj, f):
        func = getattr(obj, f)
        func()
    else:
        print('404')
反射2
if __name__ == '__main__':
run()

 

posted @ 2016-06-12 11:48  6随6心6  阅读(73)  评论(0编辑  收藏  举报