Réponses:
Il existe des fonctions intégrées appelées getattretsetattr
getattr(object, attrname)
setattr(object, attrname, value)
Dans ce cas
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1, et une variable x = 'df1'ie df1 comme une chaîne dans var x. je veux imprimer la forme de df comme ça, getattr(x, 'shape')ou getattr('df1', 'shape'). Je sais que cela ne peut pas être fait avec getattr, aucune autre méthode.
getattr(globals()[x], 'shape')
newmodule qui était obsolète en 2008 .Il y a python intégré aux fonctions setattr et getattr. Qui peut utilisé pour définir et obtenir l'attribut d'une classe.
Un bref exemple:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
Si vous souhaitez garder la logique cachée à l'intérieur de la classe, vous pouvez préférer utiliser une méthode getter généralisée comme ceci:
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
Les sorties:
Attribute value of attr1 is 1
Une autre approche qui pourrait le cacher encore mieux serait d'utiliser la méthode magique __getattribute__, mais j'ai continué à obtenir une boucle sans fin que je ne pouvais pas résoudre en essayant de récupérer la valeur d'attribut dans cette méthode.
Notez également que vous pouvez également utiliser vars(). Dans l'exemple ci-dessus, vous pourriez échanger getattr(self,varname)par return vars(self)[varname], mais cela getattrpourrait être préférable selon la réponse à Quelle est la différence entre varset setattr? .