专业编程基础技术教程

网站首页 > 基础教程 正文

python反射到底是什么?真没那么高大上

ccvgpt 2024-08-05 12:13:38 基础教程 12 ℃

先理一下概念

反射严谨解释:通过字符串的形式操作对象或模块中的成员。

python反射到底是什么?真没那么高大上

反射通俗解释:反射就是从一个东西里取出属于他的成员(可以判断、调用、编辑、删除)

我们用成员调用来对比解释一下更清楚

  • 正常调用:程序员自己知道什么时候调用哪个属性或方法。比如:对象.属性、对象.方法()
  • 反射调用:由用户来决定(输入或点击)什么时候调用哪个属性或方法。比如:g = getattr(对象, '属性或方法名')

操作成员包括判断、调用、设置、删除,python内置了四个方法专门操作成员,简单介绍一下

  • 成员判断:hasattr(obj, 'age') 对象obj中存在age成员返回True,不存在返回False
  • 成员调用:getattr(obj, 'age') 对象obj中取出age成员,age如果是方法则加小括号调用
  • 成员设置:setattr(obj, 'age', 10) 对象obj中设置age成员属性为10
  • 成员删除:delattr(obj, 'age') 对象obj中删除age成员

反射调用比正常调用要麻烦些,但是为什么要用反射调用呢?

原因:用户输入或点击的链接一般都是字符串形式(不是字符串也可以转换成字符串)

先通过下面的示例知道反射如何使用

1、从对象中取成员

正常调用



反射调用



再来一个示例说明反射的方便的地方

有的web框架就用反射来做URL路由,通过下面示例我想你应该了解了反射

示例功能:通过用户输入不同的字符串,执行不同的函数

正常调用(如果方法多不好写了)



反射调用(不管多少方法)



上面示例都是基于类来做的解释,基本已能说明反射的用途。


2、从模块中取成员

模块是一样的,下面看看模块成员及调用,你就明白了。

模块成员



模块成员的反射调用


Tags:

最近发表
标签列表