有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入。举个具体的例子:当我们需要实现一个通用的DBM框架时,可能需要对数据对象的字段赋值,但我们无法预知用到这个框架的数据对象都有些什么字段,换言之,我们在写框架的时候需要通过某种机制访问未知的属性。
这个机制被称为反射(反过来让对象告诉我们他是什么),或是自省(让对象自己告诉我们他是什么),用于实现在运行时获取未知对象的信息。
一. 代码示例
1 | def a(a): |
1 | def b(): |
1 | from a import * |
1 | import json |
1 | # -*- coding: utf-8 -*- |
二. 结果演示
1. 未知函数
当传入的方法名为 page
, 参数为 {"node_id":1, "title":"xxxxx", "keyword":"aaaaaa"}
时, 返回错误。
2. 已知函数, 并带有参数
当传入的方法名为 a
, 参数为{"a":"a"}
, 结果返回了之前a
函数中的return值([1,2,3,4])
。
3. 已知函数, 不带参数
当传入的方法名为 b
, 参数为{}
(空), 结果返回了之前b
函数中的return值1
。