Відповіді:
Є вбудовані функції, що називаються 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, будь-якими іншими методами.
new
модуля, який був застарілий у 2008 році .Є пітон, вбудований у функції 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
Якщо ви хочете зберегти логіку, приховану всередині класу, ви можете скористатися узагальненим методом getter таким чином:
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
? .