Python运行时刻对象的获取
Python是一种动态类型定义语言,和VBScript一样 ,,它们确定一个变量的类型是在第一次给它赋值的时候,即用户不用事先声明一个变量的类型;同时它也是一种强类型定义语言,如果有一个整数, 如果不明确地进行转换 , 不能将把它当成一个字符串。
在MFC中,我们经常看到一个词RTTI,即运行时刻类型标识,类似地,在Python语言中,用户也可以通过getattr()得到一个直到运行时刻才知道名称的函数的引用,这点使得我们在运行时刻可以监视一切运行在解释器中的对象。如下面的例子:
>>> li=[]
>>> getattr(li,'pop')
<built-in method pop of dict object at 0x0136BAE0>
返回的就是字典对象li的pop函数的内存地址的引用。
返回一个引用,就可以用它执行普通的操作,如:
>>> a=[]
>>> getattr(a,'append')('aas')
>>> a
['aas']
getattr的强大之处在于,它不仅可以作用于内置的数据类型,也适用外置模块。getattr 常见的使用模式是作为一个分发者。举个例子,如果有一个程序可以以不同的格式输出数据,我们可以为每种输出格式定义各自的格式输出函数,然后使用唯一的分发函数调用所需的格式输出函数。
例如,让我们假设有一个以 HTML、XML 和普通文本格式打印站点统计的程序。输出格式在命令行中指定,或者保存在配置文件中。statsout 模块定义了三个函数:output_html、output_xml 和 output_text。然后主程序定义了唯一的输出函数,如下:
import statsout
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" % format)
return output_function(data)
看的明白这段代码吗?output是一个包含默认参数的函数,当使用这个函数的时候,必须输出两个参数,一个是要输出的数据,另外一个是输出的模式。如果format是xml,则output_function=getattr(statsout,'output_xml'),即statsout模块中output_xml函数的引用,然后返回的就是这个函数的运行结果。
Related Items
Comments
Leave a comment
Or, take a look at Archives and Categories