文档章节

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

共有 人打赏支持
人间四月
粉丝 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 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
Python - __getattr__() 和 __getattribute__() 方法的区别

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

索隆
2012/05/13
0
0
《PyCon2018》系列二:Elegant Solutions For Everyday Python Problems

前言 平日写Python代码的过程中,我们会碰到各种各样的问题。其实大部分问题归结下来主要也就是那么几类,并且其中不少都是我们会反复遇到的。如何用Python优雅的解决这些问题呢?Nina Zakh...

codehub
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中的移位运算符

国庆给自己放了个小长期二十几天,回来继续更新专栏 上一篇文章我们说了Java里的二进制,知道了计算机是以0和1来处理数据的,在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号...

SuShine
18分钟前
2
0
linux版QQ

下载地址在这 http://yun.tzmm.com.cn/index.php/s/XRbfi6aOIjv5gwj Appimage包不用做什么别的处理,安装啥的都不需要。。找到文件所在目录,终端中修改一下文件的权限 chmod 777 QQ-2017112...

悲催的古灵武士
24分钟前
1
0
咕泡-MyBatis 实用篇作业

1. Mapper在spring管理下其实是单例,为什么可以是一个单例? 首先,mapper 内部不包含 成员字段,无状态单例是安全的 另外,一直存在不用每次调用都new 一个新实例 2. MyBatis在Spring集成下...

职业搬砖20年
27分钟前
2
0
MQTT协议的初浅认识之连接建立

MQTT百科 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布...

亚林瓜子
43分钟前
1
0
OpenStack部署都有哪些方式

对于每一个刚接触到OpenStack的新人而言,安装无疑是最困难的,同时这也客观上提高了大家学习OpenStack云计算的技术门槛。想一想,自己3年前网上偶然接触到OpenStack时,一头茫然,手动搭建一...

tututu_jiang
44分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部