码迷,mamicode.com
首页 > 编程语言 > 详细

python的学习之路day6

时间:2018-01-06 16:38:17      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:意思   等于   logo   inpu   port   ==   字符串   pre   setattr   

反射

利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员(函数),反射

用了一个仿网页的get方法实现

commons.py文件

commons.py
def login():
    print("登录页面")


def logout():
    print("退出页面")


def home():
    print("主页面")

 index.py文件

import commons  # 调用commons模块

def run():
    url = input("请输入要访问的url:")
    """
    url==字符串类型,如果url==“login”
    commons.url()   显然,这样是不对的,因为这样执行commons会去他里面找他是否有url这个函数,如果没有,直接报错
    利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员(函数),反射
    """
    # setattr()
    # delattr()
    if hasattr(commons, url):  # url==字符串,而现在,url相当于等于一个函数,我们输入的函数,用hasattr去判断是否存在,返回值True或False
        func = getattr(commons, url)  # 用getattr拿取这个函数,比如url==login,那么也就是说现在(func==commons.login)
        func()  # 然后我们再来执行以下func,就表示执行commons里面的函数
    else:
        print("404")  # 如果hasattr没有检查到,就执行这句404


if __name__ == ‘__main__‘:  # __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
    run()

输出:
请输入要访问的url:login
登录页面

 从上面可以看出来,我们只能访问一个模块,如果增加一个模块,我们需要去import里面继续添加,当然,python也想过这个问题,所以import也可以传递字符串

一个小小的测试:

#文件:commons.py
def login():
    print("登录页面")


def logout():
    print("退出页面")


def home():
    print("主页面")


#文件:import_test.py
obj = __import__("commons")
obj.login()
obj.logout()
obj.home()

输出:
登录页面
退出页面
主页面

 

python的学习之路day6

标签:意思   等于   logo   inpu   port   ==   字符串   pre   setattr   

原文地址:https://www.cnblogs.com/smelond/p/8214537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!