温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

反射的应用

发布时间:2020-08-10 21:33:05 来源:网络 阅读:273 作者:飞天喜欢yu 栏目:编程语言

我们在来复习一下反射

#demo.py中的程序
#!/usr/bin/env python
#coding:utf-8
def Foo():
    print "demo.foo"
#主程序
#!/usr/bin/env python
#coding:utf-8
str1 = 'demo'
str2 = 'Foo'
module = __import__(str1) # == import demo
funk = getattr(module, str2)
#getattr相当于房户户demo模块中的Foo函数
funk()
#可以看到getater就是找到foo函数,并且赋给funk函数。
结果:demo.foo

我们引入反射的应用实例

#account.py文件
#!/usr/bin/env python
#coding:utf-8
#登录网站相关文件
def login():
    print 'login'
def logout():
    print 'logout'

#index.py文件
#!/usr/bin/env python
#coding:utf-8
from backend import account
data  = raw_input("请输入URL:")
array = data.split('/')
if data == 'accout/login':
    account.login()
elif data == 'account/logout':
    account.logout()
#这里我们的大型网站如果有100个URL是不是我们要写100个if呢,这里我们就可以用反射动态获取。在下面介绍

一般web获取URL的原理

#这里admin.py和account.py都时我们URL的一个分页面
#admin.py文件
#!/usr/bin/env python
#coding:utf-8
def index():
    print '欢迎登陆后台管理'

#account.py文件
#!/usr/bin/env python
#coding:utf-8
#登录网站相关文件
def login():
    print 'login'
def logout():
    print 'logout'

#index.py文件
#!/usr/bin/env python
#coding:utf-8
data  = raw_input("请输入URL:")
array = data.split('/')
userspance = __import__('backend.'+array[0])
model = getattr(userspance, array[0])
func = getattr(model, array[1])

#相当于先导入一个文件夹,在文件夹中在导入那个模块,在执行函数。

#这里__import__ 相当于先导入import backend.account,然后在导入模块,在执行login()函数,也就是跟正常的没有区别,先import backend,然后backend.account,然后在backend.account.login

#这里我们正常导入模块时 import bachend.account ,执行的时候是使用backend.account.login(),所以我们这里在使用两次次getattr,这下应该差不多明白了
func()

#一次执行结果:
请输入URL:admin/index
欢迎登陆后台管理
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI