zoukankan      html  css  js  c++  java
  • python内置函数之attr【反射】

    #Auther Bob
    #--*--conding:utf-8 --*--

    #我们来循序渐进的学习反射

    import s1

    #阶段1
    # def run():
    # url = input("请输入要访问的url:")
    # if url == 'login':
    # s1.login()
    # elif url == 'logout':
    # s1.logout()
    # elif url == 'home':
    # s1.home()
    # else:
    # print('404')
    #
    # run()


    #阶段2
    #如果能根据用户输入的值自动找到s1中的函数名,那么上面的函数就会变的很简单,把字符串变为函数名

    # import s1
    # def run():
    # url = input("请输入要访问的url:")
    # #如果能用下面的方式,是不是就会变的很简单,但是实际上是不行的,但是我们可以通过反射来实现下面的效果
    # # s1.url()
    # #反射的作用:利用字符串的形式去对象(默认)中操作(寻找,判断,删除,设置)成员,就可以用gatarrer
    # func = getattr(s1,url) #这个意思是去模块s1中,找一个名称为url的函数名,然后把这个值赋值给func,执行func就是可以s1模块中的url函数
    # func()
    # #这里还有一个问题,如果s1中没有url这个函数,则会报错,那么我们在执行getattr的时候先判断下函数名url是否存在
    #
    # run()



    #阶段3,先判断url是否在模块s1中
    # import s1
    # def run():
    # url = input("请输入要访问的url:")
    # if hasattr(s1,url):
    # func = getattr(s1,url)
    # func()
    # else:
    # print('404')
    # run()



    #上面介绍了反射的两个函数:getattr和hasattr,反射还有两个函数delattr()和setattr()
    # delattr() #模块中删除成员
    # setattr() #模块中设置成员

    # import s1
    # def run():
    # url = input("请输入要访问的url:")
    # delattr(s1,'login')
    # if hasattr(s1,'login'):
    # print('login is exist')
    # else:
    # print('login is not exist')
    #
    # run()

    #上面的方法可以使用字符串的形式操作模块


    #如果我们有很多的模块,成百上千,那么我们导入模块也会导致很多的模块,这也是个相当费力的工作,在importr的时候也可以用到
    #反射

    #下面的方法可以使用字符串的形式导入模块,__import__就可以实现,下面两种方法的效果是一样的


    #
    # import s1
    # s1.login()
    #
    # obj = __import__('s1')
    # obj.login

    # def run():
    # url = input("请输入要访问的url:模块名/函数名:")
    # mod,func = url.split('/')
    # mod_obj = __import__(mod)
    # f = getattr(mod_obj,func)
    # f()
    #
    # run()



    #如果不用字符串的方式导入模块,我们导入其他模块的目录的模块是可以用下面的方法导致
    # import lib.s1,但是如果用字符串的方式导入,则用这个方法是不可以的

    obj = __import__('lib.' + 's3',fromlist=True)
    print(obj)
    # <module 'lib.s3' from 'E:\python\pycharm\模块\lib\s3.py'>

    #这里查看obj,可以看到我们导入了s3这个模块

    obj = __import__('lib.s3')
    print(obj)
    # <module 'lib' from 'E:\python\pycharm\模块\lib\__init__.py'>

    #这里查看obj,可以看到我们没有导入s3这个模块
  • 相关阅读:
    CSU oj 2092-Space Golf
    (全国多校重现赛一)F-Senior Pan
    URAL 1152 False Mirrors
    Codeforces D
    URAL 1635 Mnemonics and Palindromes
    URAL
    Codeforces 912E
    Codeforces 911E
    Codeforces 294D
    Codeforces 448E
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/6691561.html
Copyright © 2011-2022 走看看