Python 我为什么要用“我为什么要用”呢;getattr()“;?

Python 我为什么要用“我为什么要用”呢;getattr()“;?,python,Python,根据我的理解,getattr(object,“method”)相当于object.method()。如果这是真的,那么使用getattr有什么意义?如果属性的名称是字符串,则可以使用getattr。e、 g: attribute = "some_attribute" getattr(object, attribute) 另外,如果您有一个在未设置属性时要使用的默认值,则最好使用: getattr(object, attribute, "default") # does not raise A

根据我的理解,
getattr(object,“method”)
相当于
object.method()
。如果这是真的,那么使用
getattr
有什么意义?

如果属性的名称是字符串,则可以使用
getattr
。e、 g:

attribute = "some_attribute"
getattr(object, attribute)
另外,如果您有一个在未设置属性时要使用的默认值,则最好使用:

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

通常,当编写代码时方法的名称未知时:

def print_some_attr(obj, attr):
    print getattr(obj, attr)
或者,当您希望编写适用于多个属性的通用代码,同时避免反复编写相同的内容时:

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

Python中的对象可以具有属性。 例如,您有一个对象
person
,该对象有几个属性:
name
gender
,等等。 您访问这些属性(无论是方法还是数据对象)时通常会写入:
person.name
person.gender
person.the_method()
,等等

但是如果在编写程序时不知道属性的名称呢?例如,属性名称存储在名为
gender\u attribute\u name
的变量中

如果

然后,不是写,

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

您的理解不太正确,
getattr(object,“method”)
相当于
object.method
(无方法调用)。当然,您可以使用
getattr
调用该方法,但拼写为
getattr(object,“mehod”)()
。不过,这与您的问题无关。您在这里要做的是,一旦知道“name”是属性的正确名称,就将属性的名称指定给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
>>>