Réponses:
Il existe des fonctions intégrées appelées getattr
etsetattr
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')
new
module 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 getattr
pourrait être préférable selon la réponse à Quelle est la différence entre vars
et setattr
? .