我为什么要使用“getattr()”?

时间:2015-06-29 09:59:49

标签: python

据我了解,getattr(object, "method")相当于object.method()。如果是这样,那么使用getattr是什么意思?

3 个答案:

答案 0 :(得分:4)

如果您将属性的名称作为字符串,则可以使用getattr。 e.g:

attribute = "some_attribute"
getattr(object, attribute)

如果在未设置属性时使用默认值,则可以使用它:

getattr(object, attribute, "default")  # does not raise AttributeError

答案 1 :(得分:3)

通常在编写代码时不知道方法的名称:

def print_some_attr(obj, attr):
    print getattr(obj, attr)

或者当您想要编写适用于多个属性的通用代码时,同时避免一遍又一遍地编写相同的内容:

for attr in ["attr1", "attr2", "attr3"]:
    print "%s is: %s" % (attr, getattr(obj, attr))

答案 2 :(得分:3)

Python中的对象可以具有属性。 例如,您有一个对象person,它有多个属性:namegender等。 您可以通过以下方式访问这些属性(无论是方法还是数据对象):person.nameperson.genderperson.the_method()等。

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

如果

attr_name = 'gender'

然后,而不是写

gender = person.gender

你可以写

gender = getattr(person, attr_name)

一些练习:

>>> 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
>>>