文档章节

The Python getattr Function

人间四月
 人间四月
发布于 2016/04/11 15:47
字数 473
阅读 42
收藏 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 ...

大数据之路
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

没有更多内容

加载失败,请刷新页面

加载更多

fabric-sdk-java 1.4安装说明

Hyperledger Fabric Java SDK是开发基于Hyperledger Fabric区块链的Java应用之必备开发包。本文将介绍如何在Maven、Gradle和Eclipse中安装使用最新1.4版本的Hyperledger Fabric Java SDK。 ...

汇智网教程
23分钟前
0
0
Linux基础优化与安全归纳总结

一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性。本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事、同...

xiangyunyan
24分钟前
2
0
要996还是要生活?

今天早上,嗅嗅还在被窝的时候,睁开朦胧的双眼,习惯性的打开手机,一行小字映入眼帘:要996还是要生活 当真是垂死病中惊坐起,嗅嗅瞬间就清醒过来了。 其实嗅嗅当时的内心活动是:别闹了,...

forespider
24分钟前
4
0
SpringCloud微服务构建

遇到问题 修改server.port后,端口变更不起作用,总是8080 src/java/resources应该和rc/java/java在同一个层级,否则boot读取不到配置信息

铲平王
25分钟前
2
0
[IntelliJ IDEA][maven]properties in parent definition are prohibited报错

<parent> ... <version>${platform.version}</version><parent> IntelliJ报错: properties in parent definition are prohibited 解决: idea的错误提示,不用管 或者升级到maven3.5.......

Danni3
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部