强大的getattr函数

      python是面向对象的语言,而python中的函数也是对象,通过使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。例如:

 

li = ["Larry", "Curly"]
getattr(li, "pop")           

    getattr函数返回的是list的pop函数的引用,方法名称是作为一个字符串参数传递给 getattr 函数的。你可以通过getattr(object,"function")()来使用一个函数。例如:

getattr(li, "append")("Moe") 

    getattr 不仅仅适用于内置数据类型,也可作用于模块。使用方法和内置数据类型基本相同。

    getattr 常见的使用模式是作为一个分发者。在《Dive Into Python》有一个很经典的例子。

    让我们假设有一个以 HTMLXML 和普通文本格式打印站点统计的程序。输出格式在命令行中指定,或者保存在配置文件中。statsout 模块定义了三个函数:output_htmloutput_xmloutput_text 。然后主程序定义了唯一的输出函数,如下:

import statsout
def output(data, format="text"):                              
    output_function = getattr(statsout, "output_%s" % format) 
    return output_function(data)  

    output 函数接收一个必备参数 data ,和一个可选参数 format 。如果没有指定 format 参数,其缺省值是 text 并完成普  通文本输出函数的调用。你可以连接 format 参数值和 "output_" 来创建一个函数名称作为参数值,然后从 statsout 模块中取得该函数。这种方式允许今后很容易的扩展程序以支持其它的输出格式,而且无需修改分发函数。所要做的仅仅是向 statsout 中添加一个函数,比如 output_pdf ,之后只要将 “pdf” 作为 format 的参数值传递给 output 函数即可。

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值