`

小谈Python的getattr函数

阅读更多

通过 getattr 获取对象引用

 

你已经知道 Python 函数是对象。 你不知道的是,使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。

 

>>>li = ["Larry", "Curly"]

>>>li.pop                      

<built-in method pop of list object at 010DF884>

>>>getattr(li, "pop")     

<built-in method pop of list object at 010DF884>

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

>>>li

["Larry", "Curly", "Moe"]

>>>getattr({}, "clear")        

<built-in method clear of dictionary object at 00F113D4>

>>>getattr((), "pop")

 

用于模块的 getattr

 

getattr 不仅仅适用于内置数据类型,也可作用于模块。

 

 

>>>import odbchelper

>>>odbchelper.buildConnectionString   
          
<function buildConnectionString at 00D18DD4>

>>>getattr(odbchelper, "buildConnectionString") 

<function buildConnectionString at 00D18DD4>

>>>object = odbchelper

>>>method = "buildConnectionString"

>>>getattr(object, method)     
                 
<function buildConnectionString at 00D18DD4>

>>>type(getattr(object, method))      
          
<type 'function'>

>>>import types

>>>type(getattr(object, method)) == types.FunctionType

True

>>>callable(getattr(object, method))     
       
True
 

 

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)
 

你是否发现前面示例的一个 Bug?即字符串和函数之间的松耦合,而且没有错误检查。如果用户传入一个格式参数,但是在 statsout 中没有定义相应的格式输出函数,会发生什么呢?还好,getattr 会返回 None,它会取代一个有效函数并被赋值给 output_function,然后下一行调用函数的语句将会失败并抛出一个异常。这种方式不好。
值得庆幸的是,getattr 能够使用可选的第三个参数,一个缺省返回值。

 

import statsout

def output(data, format="text"):

    output_function = getattr(statsout, "output_%s" % format, statsout.output_text)

    return output_function(data) 
 

这个函数调用一定可以工作,因为你在调用 getattr 时添加了第三个参数。第三个参数是一个缺省返回值,如果第二个参数指定的属性或者方法没能找到,则将返回这个缺省返回值。

 

分享到:
评论

相关推荐

    浅谈python中的getattr函数 hasattr函数

    ### Python中的`getattr`与`hasattr`函数详解 #### 一、引言 在Python编程语言中,`getattr`和`hasattr`是两个非常有用的内置函数,它们主要用于对象属性的操作,尤其在动态地访问对象属性时发挥着重要作用。本文将...

    python中getattr函数使用方法 getattr实现工厂模式

    在Python编程语言中,`getattr()`函数是一个非常实用的内置函数,它允许我们动态地从对象中获取属性。函数的基本语法是`getattr(object, name[, default])`,它接受三个参数: 1. `object`:这是一个对象,我们需要...

    python的getattr()函数

    python的getattr()函数的说明与代码示例

    Python getattr()函数使用方法代码实例

    ### Python `getattr()` 函数详解及应用场景 #### 一、`getattr()` 函数概述 `getattr()` 是Python内置的一个函数,其主要功能是通过给定的对象和属性名(字符串形式)来获取对象的属性或方法。这对于实现动态加载...

    Python中getattr函数和hasattr函数作用详解

    ### Python中getattr函数和hasattr函数作用详解 #### 一、引言 在Python编程语言中,`getattr`和`hasattr`是非常实用且强大的内置函数,它们在处理对象属性时提供了灵活的操作方式。本文将深入探讨这两个函数的用法...

    python内置函数大全

    Python内置函数涉及了Python编程语言中最基础的函数集合,它们是Python标准库的一部分,...以上列举的只是一小部分Python内置函数,但它们是处理常见任务的基础。掌握这些函数能帮助开发者编写简洁、高效的Python代码。

    Python内置函数案例演示.pdf

    由于提供的文件内容中包含了大量重复的警告和版权声明,并没有给出具体的Python内置函数的介绍和代码示例,所以无法从这部分内容中提炼出...对于初学者来说,可以通过编写小段代码来实践这些内置函数,加深理解和记忆。

    浅谈 Python 魔法函数 __getattr__ 与 __getattribute__

    在Python编程语言中,有一些特殊的内置方法被称为“魔法函数”(Magic Methods),它们通常以两个下划线开头和结尾,例如`__getattr__`和`__getattribute__`。这两个魔法函数都涉及到对象属性的访问,但它们在处理不...

    浅谈使用Python内置函数getattr实现分发模式

    在Python编程中,`getattr()`是一个内置函数,用于获取对象的属性。本文主要探讨了如何利用`getattr()`实现分发模式,这是一种设计模式,用于根据特定条件选择并执行不同的方法。分发模式在处理多态性或动态行为时...

    python特殊函数

    ### Python特殊函数详解 在Python编程语言中,特殊函数(也称为魔术方法或双下划线方法)提供了一种机制,使开发人员能够为自定义类实现特定的行为。这些特殊函数通常以双下划线(`__`)开头并以双下划线结束,如`_...

    在Python中通过getattr获取对象引用的方法

    在Python编程中,`getattr()`函数是一个非常实用的内置函数,它允许我们在运行时动态地获取对象的属性。这个函数的主要用途是当你需要根据某些条件来访问对象的属性,而这些属性的名称在编写代码时可能还不确定。...

    python通过函数名调用函数的几种场景

    在Python编程中,有时我们需要根据特定条件或动态数据来决定调用哪个函数。本文将详细介绍如何通过函数名来实现这种动态调用的功能。这在处理复杂逻辑或灵活配置时非常有用。 一、函数名调用的基本概念 在Python中...

    python常用的函数[文].pdf

    Python常用函数 Python是一种高级编程语言,具有简单易学、灵活、可扩展等特点。Python提供了许多内置函数和模块,可以帮助开发者快速构建高效、可靠的软件系统。本文总结了Python中常用的函数和模块,包括内置函数...

    python函数速查手册,留作备用

    在这个Python函数速查手册中,我们主要探讨的是Python中的内建函数和字符串内置方法。 首先,让我们来了解一下内建函数。内建函数是Python语言自带的一系列预定义函数,可以直接在任何地方使用,无需额外导入。以下...

    python内置函数

    ### Python内置函数详解 #### 数学运算类 1. **`abs(x)`**:此函数用于求取一个数值的绝对值。例如,`abs(-5)` 返回 5。 2. **`complex([real[, imag]])`**:创建一个复数。如果只提供实部,则虚部默认为 0。如果...

    python常用函数

    ### Python常用函数详解 Python作为一门强大的编程语言,在软件开发、数据分析、自动化脚本等领域有着广泛的应用。Python的内置函数是其强大功能的基础之一,掌握这些内置函数可以帮助开发者更高效地编写代码。本文...

Global site tag (gtag.js) - Google Analytics