python getattr用法_Python-到底什么是getattr(),我该如何使用它?

小编典典

Python中的对象可以具有属性-数据属性和与之配合使用的方法(方法)。实际上,每个对象都有内置的属性。

例如你有一个对象person,一个具有多个属性:name,gender,等。

你可以访问这些属性(无论是方法或数据对象),通常写作:person.name,person.gender,person.the_method()等。

但是,如果在编写程序时不知道属性名称怎么办?例如,你将属性名称存储在名为的变量中attr_name。

如果

attr_name = 'gender'

然后,而不是写

gender = person.gender

你可以写

gender = getattr(person, attr_name)

一些实践:

Python 3.4.0 (default, Apr 11 2014, 13:05:11)

>>> class Person():

... name = 'Victor'

... def say(self, what):

... print(self.name, what)

...

>>> getattr(Person, 'name')

'Victor'

>>> attr_name = 'name'

>>> person = Person()

>>> getattr(person, attr_name)

'Victor'

>>> getattr(person, 'say')('Hello')

Victor Hello

getattrAttributeError如果对象中不存在具有给定名称的属性,则将引发:

>>> getattr(person, 'age')

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'Person' object has no attribute 'age'

但是你可以传递一个默认值作为第三个参数,如果该属性不存在,则将返回该默认值:

>>> getattr(person, 'age', 0)

0

你可以使用getattr和dir来迭代所有属性名称并获取它们的值:

>>> dir(1000)

['__abs__', '__add__', ..., '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

>>> obj = 1000

>>> for attr_name in dir(obj):

... attr_value = getattr(obj, attr_name)

... print(attr_name, attr_value, callable(attr_value))

...

__abs__ True

...

bit_length True

...

>>> getattr(1000, 'bit_length')()

10

一个实际的用途是查找所有以其名称开头test并调用它们的方法。

类似getattr还有setattr它允许你设定有其名称的对象的属性:

>>> setattr(person, 'name', 'Andrew')

>>> person.name # accessing instance attribute

'Andrew'

>>> Person.name # accessing class attribute

'Victor'

>>>

2020-02-18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值