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