web-dev-qa-db-fra.com

Python chaîne à attribuer

Comment puis-je réaliser un tel travail:

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

C'EST À DIRE:

si je fais get_foo(obj, "name") il devrait appeler obj.name (voir entrée comme chaîne mais je l'appelle comme attritube.

Merci

45
Hellnar

Utilisez la fonction intégrée getattr .

getattr ( objet, nom [ par défaut])

Renvoie la valeur de l'attribut nommé objet. nom doit être une chaîne. Si la chaîne est le nom d'un des attributs de l'objet, le résultat est la valeur de cet attribut. Par exemple, getattr(x, 'foobar') est équivalent à x.foobar. Si l'attribut nommé n'existe pas, par défaut est renvoyé s'il est fourni, sinon AttributeError est déclenché.

70
adamk

Si someobject a un attribut nommé foostring alors

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

ou si vous souhaitez définir un attribut sur l'objet fourni, alors:

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

Essayez-le

32
Nazmul Hasan

Vous devez utiliser setattr et getattr:

setattr(object,'property',value)
getattr(object,'property',default)
22
Frost.baka