`
conjohn668
  • 浏览: 19121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

The Python getattr Function

阅读更多
December 7, 2005 | Fredrik Lundh

Python’s getattr function is used to fetch an attribute from an object, using a string object instead of an identifier to identify the attribute. In other words, the following two statements are equivalent:

value = obj.attribute
value = getattr(obj, "attribute")

If the attribute exists, the corresponding value is returned. If the attribute does not exist, you get an AttributeError exception instead.

The getattr function can be used on any object that supports dotted notation (by implementing the __getattr__ method). This includes class objects, modules, and even function objects.

path = getattr(sys, "path")
doc = getattr(len, "__doc__")

The getattr function uses the same lookup rules as ordinary attribute access, and you can use it both with ordinary attributes and methods:

result = obj.method(args)

func = getattr(obj, "method")
result = func(args)

or, in one line:

result = getattr(obj, "method")(args)

Calling both getattr and the method on the same line can make it hard to handle exceptions properly. To avoid confusing AttributeError exceptions raised by getattr with similar exceptions raised inside the method, you can use the following pattern:

try:
    func = getattr(obj, "method")
except AttributeError:
    ... deal with missing method ...
else:
    result = func(args)

The function takes an optional default value, which is used if the attribute doesn’t exist. The following example only calls the method if it exists:

func = getattr(obj, "method", None)
if func:
    func(args)

Here’s a variation, which checks that the attribute is indeed a callable object before calling it.

func = getattr(obj, "method", None)
if callable(func):
    func(args)



[comment on/vote for this article]

Comment:

Nice article, but it needs to include how to override __getattr__ and __getattribute__ and when to use these

Posted by Mohammad Tayseer (2007-02-12)
分享到:
评论

相关推荐

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

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

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

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

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

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

    python-3.8.0-docs-pdf-a4_Python3.8_python版本文档_python3.8文档_

    另外,`__getattr__`和`__getattribute__`方法的行为也有所调整,以提高类的灵活性。 在函数和类的定义上,Python 3.8.0允许在函数或方法定义后添加类型注解,如`def func(a: int) -> str:`,这为代码的自我文档化...

    SmallPython

    `function`和`module`对象的内部结构在SmallPython中有详细呈现,包括函数的闭包、装饰器的实现以及模块的导入机制。 五、异常处理与错误报告 Python的异常处理机制使得程序能够优雅地处理错误。在SmallPython中,...

    Python Interview

    print(getattr(my_function, '__name__')) # 输出:my_function ``` #### 6. 字典推导式 字典推导式是一种简洁的方式,用于根据现有的序列或其他可迭代对象构建新的字典。其语法形式为 `{key_expression: value_...

    python官方3.8.6rc1版本exe安装包

    7. **模块级别的`__getattr__`**:现在可以在模块级别定义`__getattr__`方法,允许模块动态响应未定义的属性访问。 8. **`os.PathLike`接口支持**:许多与文件路径相关的函数现在接受实现了`os.PathLike`接口的对象...

    python面试题100道

    ### Python面试题100道概述 #### 1. Python 的函数参数传递 - **不可变对象 vs 可变对象**: 在 Python 中,参数传递遵循“引用传递”的原则,但根据对象是否可变,实际效果有所不同。对于不可变对象如数字、字符串...

    Python核心编程第二版

    很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   1.3.5 可...

    python内置函数大全

    - `filter(function, iterable)`: 将iterable中使function返回值为True的项组成一个迭代器返回。 以上列举的只是一小部分Python内置函数,但它们是处理常见任务的基础。掌握这些函数能帮助开发者编写简洁、高效的...

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

    be_called_function = getattr(self, self.config_dict["be_called_function_name"]) be_called_function() def be_called_function(self): print("here is be_called_function.") if __name__ == "__main__":...

    python inspect解析

    例如,我们使用inspect.ismodule()来检查一个对象是否是模块,使用inspect.isclass()来判断一个对象是否是类,使用inspect.isfunction()来判断一个对象是否是函数。这种类型检查在需要动态地判断对象性质时非常有用...

    Python 2.4 Quick Reference Card

    ### Python 2.4 快速参考卡知识点详解 #### 一、环境变量与命令行选项 **环境变量** - **定义**: Python 运行时会读取一系列环境变量来配置其行为。 - **示例**: `PYTHONPATH` 用于指定额外的模块搜索路径。 **...

    python面试题

    Python提供了丰富的内置函数来支持自省,例如`dir()`可以列出对象的所有属性和方法,`getattr()`用于获取对象的属性等。自省常用于动态编程,例如根据运行时的信息来决定执行何种操作。 #### 6. 字典推导式 字典...

    python面试题100.docx

    - `getattr()`: 获取对象的属性。 - `hasattr()`: 检查对象是否具有某个属性。 - `isinstance()`: 检查对象是否为某个类的实例。 这些函数可以帮助开发者更好地理解和调试代码。 #### 6. 字典推导式 Python 2.7 ...

    python内置函数

    9. **`filter(function, iterable)`**:构建一个列表,其中包含 `iterable` 中所有使得 `function` 返回 `True` 的元素。 10. **`dir([object])`**:如果不带参数,则返回当前范围内的变量、方法和定义的列表。如果...

    Python __setattr__、 __getattr__、 __delattr__、__call__用法示例

    getattr `getattr`函数属于内建函数,可以通过函数名称获取 复制代码 代码如下: value = obj.attribute value = getattr(obj, “attribute”) 使用`getattr`来实现工厂模式 ... output_function = getatt

    python 动态调用函数实例解析

    method = getattr(ClassName, 'function_name') method(param1, param2) ``` 3. **`apply()`函数**: `apply()`函数(在Python 3中已废弃,但在Python 2中可用)接受一个函数对象和参数列表,然后调用该函数。...

    python高级编程1

    此外,还有一些特殊用途的魔法函数,如`__getattr__`用于获取未定义的属性,`__setattr__`用于设置属性值,`__getattribute__`控制属性访问,以及协程相关的方法,如`__await__`、`__aiter__`等,用于异步编程。...

Global site tag (gtag.js) - Google Analytics