通过 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()`函数是一个非常实用的内置函数,它允许我们动态地从对象中获取属性。函数的基本语法是`getattr(object, name[, default])`,它接受三个参数: 1. `object`:这是一个对象,我们需要...
python的getattr()函数的说明与代码示例
### Python `getattr()` 函数详解及应用场景 #### 一、`getattr()` 函数概述 `getattr()` 是Python内置的一个函数,其主要功能是通过给定的对象和属性名(字符串形式)来获取对象的属性或方法。这对于实现动态加载...
### Python中getattr函数和hasattr函数作用详解 #### 一、引言 在Python编程语言中,`getattr`和`hasattr`是非常实用且强大的内置函数,它们在处理对象属性时提供了灵活的操作方式。本文将深入探讨这两个函数的用法...
Python内置函数涉及了Python编程语言中最基础的函数集合,它们是Python标准库的一部分,...以上列举的只是一小部分Python内置函数,但它们是处理常见任务的基础。掌握这些函数能帮助开发者编写简洁、高效的Python代码。
由于提供的文件内容中包含了大量重复的警告和版权声明,并没有给出具体的Python内置函数的介绍和代码示例,所以无法从这部分内容中提炼出...对于初学者来说,可以通过编写小段代码来实践这些内置函数,加深理解和记忆。
在Python编程语言中,有一些特殊的内置方法被称为“魔法函数”(Magic Methods),它们通常以两个下划线开头和结尾,例如`__getattr__`和`__getattribute__`。这两个魔法函数都涉及到对象属性的访问,但它们在处理不...
在Python编程中,`getattr()`是一个内置函数,用于获取对象的属性。本文主要探讨了如何利用`getattr()`实现分发模式,这是一种设计模式,用于根据特定条件选择并执行不同的方法。分发模式在处理多态性或动态行为时...
### Python特殊函数详解 在Python编程语言中,特殊函数(也称为魔术方法或双下划线方法)提供了一种机制,使开发人员能够为自定义类实现特定的行为。这些特殊函数通常以双下划线(`__`)开头并以双下划线结束,如`_...
在Python编程中,`getattr()`函数是一个非常实用的内置函数,它允许我们在运行时动态地获取对象的属性。这个函数的主要用途是当你需要根据某些条件来访问对象的属性,而这些属性的名称在编写代码时可能还不确定。...
在Python编程中,有时我们需要根据特定条件或动态数据来决定调用哪个函数。本文将详细介绍如何通过函数名来实现这种动态调用的功能。这在处理复杂逻辑或灵活配置时非常有用。 一、函数名调用的基本概念 在Python中...
Python常用函数 Python是一种高级编程语言,具有简单易学、灵活、可扩展等特点。Python提供了许多内置函数和模块,可以帮助开发者快速构建高效、可靠的软件系统。本文总结了Python中常用的函数和模块,包括内置函数...
在这个Python函数速查手册中,我们主要探讨的是Python中的内建函数和字符串内置方法。 首先,让我们来了解一下内建函数。内建函数是Python语言自带的一系列预定义函数,可以直接在任何地方使用,无需额外导入。以下...
### Python内置函数详解 #### 数学运算类 1. **`abs(x)`**:此函数用于求取一个数值的绝对值。例如,`abs(-5)` 返回 5。 2. **`complex([real[, imag]])`**:创建一个复数。如果只提供实部,则虚部默认为 0。如果...
### Python常用函数详解 Python作为一门强大的编程语言,在软件开发、数据分析、自动化脚本等领域有着广泛的应用。Python的内置函数是其强大功能的基础之一,掌握这些内置函数可以帮助开发者更高效地编写代码。本文...