据我了解,getattr(object, "method")
相当于object.method()
。如果是这样,那么使用getattr
是什么意思?
答案 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
,它有多个属性:name
,gender
等。
您可以通过以下方式访问这些属性(无论是方法还是数据对象):person.name
,person.gender
,person.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
>>>