Строка Python для атрибута - PullRequest
38 голосов
/ 15 июля 2010

Как я могу добиться такой работы:

def get_foo(someobject, foostring):
    return someobject.foostring

IE:

если я сделаю get_foo(obj, "name"), это должно вызвать obj.name (см. Ввод как строку, но я называю это какattritube.

Спасибо

Ответы [ 3 ]

61 голосов
/ 15 июля 2010

Используйте встроенную функцию getattr.

getattr ( объект , имя [, default ])

Возвращает значение именованного атрибута object . name должно быть строкой.Если строка является именем одного из атрибутов объекта, результатом является значение этого атрибута.Например, getattr(x, 'foobar') эквивалентно x.foobar.Если указанный атрибут не существует, default возвращается, если он указан, в противном случае AttributeError повышается.

29 голосов
/ 15 июля 2010

Если someobject имеет атрибут с именем foostring, тогда

def get_foo(someobject, foostring):
    return getattr(someobject,foostring)

или если вы хотите установить атрибут для предоставленного объекта, то:

def set_foo(someobject, foostring, value):
    return setattr(someobject,foostring, value)

Попробуй

20 голосов
/ 15 июля 2010

Вы должны использовать setattr и getattr:

setattr(object,'property',value)
getattr(object,'property',default)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...