小编典典
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