python后端框架 java和python的区别

1.python的反射机制是什么?python的反射机制,其核心是用字符串在现有模块中寻找指定的属性或方法,找到后自动执行方法。基于字符串的事件驱动!这也是python强大的自省能力!在Django的类视图和API开发中,利用反射机制实现了路由的底层调度方法。现在我们来看看它的实现原...

1.python的反射机制是什么?

python的反射机制,其核心是用字符串在现有模块中寻找指定的属性或方法,找到后自动执行方法。基于字符串的事件驱动!这也是python强大的自省能力!在Django的类视图和API开发中,利用反射机制实现了路由的底层调度方法。现在我们来看看它的实现原理。

第二,构建WEB框架的代码:

1。首先,我们创建一个views.py模块来实现web框架的视图功能:

def index(): print('这是主页面')def registe(): print('这是注册页面')def login(): print('这是登录页面')

2。我们创建一个***nage.py模块来实现web框架的启动页面:

import viewsdef ***in(): url = input('请输入要访问页面的url: ').strip() if url == 'index': views.index() elif url == 'login': views.login() elif url == 'registe': views.registe() else: print('404')if __name__ == '__***in__': ***in()

执行结果:

3.python中需要注意的一点:字符串和函数名的调用。

例如:

def func(): print('func是函数的名字!')a = "func"print(a,type(a))

a是一个字符串。我们可以用func()调用函数,但不能用字符串摆脱它。用func()和“func”()都不行,但是有没有办法用我们直接输入的字符串调用函数?Python是一种动态语言,自省性很强。自我检查是指面向对象语言编写的程序在运行时能够知道对象的类型。简单来说,运行时可以知道对象的类型。这里提到了四个重要的方法:

getattr()hasattr()setattr()delattr()

1。GetAttr (_ _ O,name,_ _ default):获取对象中方法或变量的内存地址:

class Student(): def __init__(self,name): self.name = name def study(self): print('%s正在学习'%self.name)s1 = Student('小明')a =getattr(s1,'name') #获取name变量的内存地址print(a) #输出:小明b = getattr(s1,'study') #获取study的内存地址,从而可以用传入的字符串去动态的调用函数b() #调用study()方法 输出:小明正在学习c = getattr(s1,'age','no attribute')print(c) #输出:no attribute。因为age属性在对象s1中没有,本应该报错,但是设置参数后找不到就报 no attribute

2.hasattr(__o,__name):判断对象中是否有该方法或变量,返回True或False

class Student(): def __init__(self,name): self.name = name def study(self): print('%s正在学习'%self.name)s1 = Student('小明')print(hasattr(s1,'study')) #输出True s1实例对象有study()方法print(hasattr(s1,'name')) #输出True s1实例对象有name属性print(hasattr(s1,'eat')) #输出False s1实例对象没有eat属性或方法

3。setattr (_ _ object,_ _ name,_ _ value):为实例化的对象动态添加属性或方法

def study(self): print('%s正在学习'%self.name)class Student(): def __init__(self,name): self.name = names1 = Student('小明')setattr(s1,'study',study)s1.study(s1) #动态给实例化对象添加方法setattr(s1,'age',18)print(s1.age) #动态给实例化对象添加属性

四:反射机制

在我们上面构建的Web框架中,我们会发现我们输入的url是views模块中的方法名。如果我们直接用输入的字符串调用对应的方法,会省很多事,因为如果views.py模块中有很多视图函数,我们就要在***nage.py中逐个判断方法名,很麻烦,一行代码getattr()就可以轻松搞定!这是Django框架中类视图API接口底层dispatch()方法的反射机制,用来分发视图函数。代码如下:

import viewsdef ***in(): url = input('请输入要访问的url: ').strip() run = getattr(views, url) run()if __name__ == '__***in__': ***in()输入:index输出:这是主页面

代码优化:在上面的输入中,如果有非法输入或者视图函数没有包含在视图中,就会报错。此时,我们可以使用hasattr()来确定视图模块中是否有传入视图函数。hasattr()返回True,False:代码如下

import viewsdef ***in(): url = input('请输入要访问的url: ').strip() if hasattr(views,url): run = getattr(views,url) run() else: print('404')if __name__ == '__***in__': ***in()#这样代码就和原来的执行效果一模一样了

本文来自眼泪是回忆的常客投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/573633.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 06-02
下一篇 06-02

相关推荐

  • java单元测试框架都有哪些 单元测试框架的作用

    文章是通过学习阿里巴巴Java开发手册整理的1。好的单元测试必须遵循AIR原则从宏观上来说,一个好的单元测试的特点是自动化、独立和可重复执行。答:自动(Auto***tic)I:独立(independence)r:可重复(repeatable)2。单元测试应该是全自动和非交互式的在测试单元中不允许使用Syste

    2023-07-24 08:41:01
    1058 0
  • mybatis插件原理 web前端三大主流框架

    一、导言在我们的日常开发工作中,不可避免的要检查当前程序执行的SQL语句,方便程序员解决问题。MP提供了两种方式来输出每个SQL语句及其执行时间。对于执行时间较长的SQL,可以停止运行,有助于发现问题。这两种方法只适用于开发环境,不推荐用于生产环境。二。性能分析插件

    2023-07-23 05:31:01
    160 0
  • ssh框架是什么

    品牌型号:联想 YOGA 14c/系统版本:windows7 SSH是指一个集成框架,包含struts、spring、hibernate,是目前流行的前端开源框架之一。Struts是一个基于MVC设计模式的Web应用框架,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,Hibernate是一个开放源代码的对象

    2023-07-15 04:46:01
    860 0
  • 企业运营框架的两大作用 2020最全运营知识及运营框架

    创造价值是真实的,利润只是结果。人生的一切都可以成功,都可以快乐,过程都可以轻松满足。——《心灵智能》而运营是企业管理中经常提到的,那么到底什么是运营,什么是运营呢?相信这个问题会让很多人停下来思考一会儿,甚至有人会疑惑。两者有区别吗?当然是有区别的。否则

    2023-07-14 07:47:01
    383 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信