Ответы:
Есть встроенные функции, вызываемые getattr
иsetattr
getattr(object, attrname)
setattr(object, attrname, value)
В таком случае
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
и переменная, x = 'df1'
т.е. df1, как строка в var x. Я хочу напечатать форму DF, как это, getattr(x, 'shape')
или getattr('df1', 'shape')
. Я знаю, что это не может быть сделано с getattr, любыми другими методами.
getattr(globals()[x], 'shape')
new
модуля, который устарел в 2008 году .В Python встроены функции setattr и getattr. Который может использоваться для установки и получения атрибута класса.
Краткий пример:
>>> 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
Если вы хотите сохранить логику скрытой внутри класса, вы можете предпочесть использовать обобщенный метод получения, например так:
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)))
Выходы:
Attribute value of attr1 is 1
Еще одно устройство, которое могло бы скрыть это еще лучше, - это использовать магический метод __getattribute__
, но я продолжал получать бесконечный цикл, который не смог разрешить, пытаясь получить значение атрибута внутри этого метода.
Также обратите внимание, что вы можете использовать в качестве альтернативы vars()
. В приведенном выше примере, вы можете обменять getattr(self,varname)
на return vars(self)[varname]
, но getattr
может быть предпочтительным в соответствии с ответом на В чем разница между vars
и setattr
? ,