Python的内建函数getattr()如何使用?

本文和大家分享的主要是python内建函数getattr()相关内容,一起来看看吧,希望对大家学习python http://www.maiziedu.com/land/python/有所帮助。

上述代码查看传送门

记录

getattr是python里的一个内建函数,先看定义

>>> help(getattr)

Help on built-in function getattr in module __builtin__:

getattr(...)

getattr(object, name[, default]) -> value

Get a named attribute from an object; getattr(x, ’y’) is equivalent to x.y.

When a default argument is given, it is returned when the attribute doesn’t

exist; without it, an exception is raised in that case.

>>>

getattr()的三个参数:

· object : 要实例化的对象

· name : 要执行的命令操作

· default :(可省略参数)当要执行的命令操作不存在是,会返回这里传入的default

getattr()主要的作用是通过传入字符串的方式,来动态的获取方法的实例。这个函数最大的用处在于函数解耦,可以讲一些可能会调用的方法,写到一个配置文件中,在需要的时候动态加载。

解释的比较抽象,简单来说: getattr(object, name) 等价于 object.name

下面通过代码说明一下

for i in range(t):

c, *args = map(str,input().split())

getattr(s,c) (*(int(x) for x in args))

这段代码实现了用户从 stdin 输入命令和参数,命令赋值给了 c ,参数传给了一个指针变量*args ,这里使用 *args 是为了接收不确定个数的参数。然后调用 getattr(s,c) 来执行 c 这条指令(注: s 是一串字符串),此处 getattr(s,c) 就可以等价于s.c ,后面括号内 (*(int(x) for x in args)) ,这里是一个生成器表达式,这部分称为参数解包,它类似于如何定义具有任意数量(位置)参数的函数 — * 在序列之前将遍历序列并将其成员变为函数调用参数。

可以看出,这样的用法比枚举的思路方便了很多,也具有更高的扩展性。

延伸

Python中和getattr相关的还有 hasattr 、 setattr 、 delattr ,通过举例了解一下。

#定义一个类对象class Vimiix:

def __init__(self):

self.name = ’vimiix’

def setName(self, name):

self.name = name

def getName(self):

return self.name

#实例化对象

foo = Vimiix()

hasattr(object, name) 判断object是否具有name属性

>>>hasattr(foo,’getName’)

True

setattr(object,name,default) 设置一个新的属性,并赋予值.类似foo.age = 18

>>>setattr(foo, ’age’, ’18’)

delattr(object, name) 删除object对象的name属性

>>>delattr(foo, ’age’)>>>getattr(foo, ’age’, ’Not find’)

’Not find’

来源:Vimiix

时间: 2024-10-10 06:41:12

Python的内建函数getattr()如何使用?的相关文章

python字符串内建函数总结

python的字符串常用内建函数        方法                        描述 string.capitalize() 将字符串的第一个字母大写 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 string.e

Python:内建函数总结

前言:Python的内建函数为编程提供了很大的方便,为方便以后的学习,在这里对Python 3.x的内建函数做一个相对完整的总结 A ? abs(x):如果x是复数,则返回它的大小:若是整数或浮点数则返回它的绝对值 1 print(abs(-1)) 2 print(abs(-10.01)) 3 print(abs(3+4j)) #返回复数的大小 ? all(iterable):如果iterable所有的元素不为0.''.False或者iterable为空,all(iterable)返回True,

python 解释器内建函数

python解释器内建函数列表如下: 001.abs() 求绝对值 #!/usr/bin/python if __name__=="__main__": print(abs(-100))#打印100 002.all() 如果参数列表中所有的值都是True,all函数才返回True #!/usr/bin/python if __name__=="__main__": conditions=[True,False] print(all(conditions))#打印Fa

Python中的getattr()函数详解:

Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception i

Python字符串内建函数_上

Python字符串内建函数: 注:汉字属于字符(既是大写又是小写).数字可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字. 1.capitalize( ): 将字符串第一个字母大写 # 使用 字符串.capitalize() 方法将字符串首字母大写 strs = 'abc' print(strs.capitalize()) # Abc 2.center(width[,fillchar]) : 让字符串在 width 长度居中,两边填充 fillchar 字符(默认是空格)

python学习-内建函数

内建函数 python 的许多功能都已经有内建的函数,按字母排序如下 abs(x) 返回绝对值 all(iterable) 参数为可迭代对象,如果可迭代对象中的所有元素都为 True,则返回 True any(iterable) 参数为可迭代对象,如果可迭代对象中的任何元素为 True,则返回 True ascii(object) 自动执行该对象的 __repr__() 方法 bin(x) 将 int 对象转为八进制,八进制表示方法 0o11 等于十进制的 9 bool([x]) 返回一个 bo

第十一章 Python常用内建函数

内建函数,可以直接使用,而不需要import. 在前面章节学过的sorded().reversed().range(),filter().reduce().map()等内建函数,下面再回顾下及学习一些新的内置函数. 函数 描述 示例 sorded(iterable, cmp=None, key=None, reverse=False) 正序排序可迭代对象,生成新的列表 >>> lst = [2,3,4,1,5] >>> sorted(lst) [1, 2, 3, 4,

Python 运算内建函数

五个函数如下 abs(), coerce(), divmod(), pow(),和 round() 下面是实战演练 abs()返回给定参数的绝对值.如果参数是一个复数,那么就返回 math.sqrt(num.real2 + num.imag2). 函数 coerce(),尽管从技术上讲它是一个数据类型转换函数. divmod()内建函数把除法和取余运算结合起来, 返回一个包含商和余数的元组. 函数 pow() 和双星号 (**) 运算符都可以进行指数运算.不过二者的区别并不仅仅在于一个是运算符,

python中内建函数isinstance的用法

isinstance:Python中的一个内建函数 语法: isinstance(object, classinfo) 1.如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True.如果object不是一个给定类型的的对象, 则返回结果总是False. 2.如果classinfo不表示一个类(类型对象), 那么它要么是一个类的元组, 或者递归地包含这样的(由数据类型构成的)元组.其他的序列类型是不被允许的. 3.如果classinfo