Antworten:
Es gibt integrierte Funktionen namens getattrundsetattr
getattr(object, attrname)
setattr(object, attrname, value)
In diesem Fall
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1und eine Variable, x = 'df1'dh df1 als String in var x. Ich möchte die Form von df so drucken, getattr(x, 'shape')oder getattr('df1', 'shape'). Ich weiß, dass dies mit getattr und anderen Methoden nicht möglich ist.
newModul, das 2008 veraltet war .In den Funktionen setattr und getattr ist Python integriert. Womit das Attribut einer Klasse festgelegt und abgerufen werden kann.
Ein kurzes Beispiel:
>>> 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
Wenn Sie die Logik in der Klasse verbergen möchten, bevorzugen Sie möglicherweise eine verallgemeinerte Getter-Methode wie die folgende:
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)))
Ausgänge:
Attribute value of attr1 is 1
Ein anderer Ansatz, der es noch besser verbergen könnte, wäre die Verwendung der magischen Methode __getattribute__, aber ich bekam immer wieder eine Endlosschleife, die ich nicht lösen konnte, als ich versuchte, den Attributwert innerhalb dieser Methode abzurufen.
Beachten Sie auch, dass Sie alternativ verwenden können vars(). Im obigen Beispiel könnten Sie getattr(self,varname)durch tauschen return vars(self)[varname], sind aber getattrmöglicherweise entsprechend der Antwort auf Was ist der Unterschied zwischen varsund setattr? .