文档章节

The Python getattr Function

人间四月
 人间四月
发布于 2016/04/11 15:47
字数 473
阅读 41
收藏 0

Python年代getattr函数用于获取一个属性的对象,使用字符串对象,而不是一个标识符识别属性。换句话说,以下两个语句是等价的

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

如果属性存在,返回相应的值。如果属性不存在,你得到一个AttributeError异常。

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.

getattr函数可用于任何支持点状符号的对象(通过实现__getattr__方法)。这包括类对象、模块和函数对象

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:

getattr函数使用相同的查询规则作为普通属性访问,您可以使用它与普通的属性和方法

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:

调用getattr和方法在同一行,那就很难正确地处理异常。为了避免混淆AttributeError异常提出getattr具有类似方法抛出的异常,您可以使用以下模式

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)

本文转载自:http://effbot.org/zone/python-getattr.htm

共有 人打赏支持
上一篇: Mixin
人间四月
粉丝 2
博文 74
码字总数 30455
作品 0
朝阳
程序员
私信 提问
Python的getattr(),setattr(),delattr(),hasattr()

getattr()函数是Python自省的核心函数,具体使用大体如下: 获取对象引用getattr Getattr用于返回一个对象属性,或者方法 class A: def init(self): self.name = 'zhangjing'    #self.ag...

Lennie002
2015/05/01
0
0
如何用 C++ 为 Python 写 dll

如何用 C++ 为 Python 写 dll 来自: http://zhongwei-leg.iteye.com/blog/693519 博客分类: C++ CC#C++PythonOS 1. 先新建一个名为 hello.cpp 的 C++ 源文件: #include <stdio.h> #define......

FreeBlues
2012/07/17
0
0
Python - __getattr__() 和 __getattribute__() 方法的区别

python 再访问属性的方法上定义了getattr() 和 getattribute() 2种方法,其区别非常细微,但非常重要。 如果某个类定义了 方法,在 每次引用属性或方法名称时 Python 都调用它(特殊方法名称...

索隆
2012/05/13
0
0
Python Tips, Tricks, and Hacks

一、快速技巧 1.1、4 种引号 ' ''' " """ print """I wish that I'd never heard him say, '''She said, "He said, 'Give me five dollars'"'''""" 1.2、对象/变量的真与假 my_object = 'Tes......

大数据之路
2013/07/23
0
0
用devstack快速安装openstack过程中出错

以下是出现的信息,Ubuntu 12.04,小弟是在做毕设,所以不是很在行- - Installing collected packages: libvirt-python Running setup.py install for libvirt-python Complete output from ......

AustenGu
2015/04/18
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
20
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
15
0
my.ini

1

architect刘源源
今天
12
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
14
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部