¿Cómo establece / obtiene los valores de los atributos de tdado por x?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
¿Cómo establece / obtiene los valores de los atributos de tdado por x?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
Respuestas:
Hay funciones integradas llamadas getattrysetattr
getattr(object, attrname)
setattr(object, attrname, value)
En este caso
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1y una variable, x = 'df1'es decir, df1 como una cadena en var x? Quiero imprimir la forma de df como esta, getattr(x, 'shape')o getattr('df1', 'shape'). Sé que esto no se puede hacer con getattr, ningún otro método.
getattr(globals()[x], 'shape')
newmódulo que fue desaprobado en 2008 .Hay python integrado en las funciones setattr y getattr. Que puede usarse para establecer y obtener el atributo de una clase.
Un breve ejemplo:
>>> 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 desea mantener la lógica oculta dentro de la clase, puede preferir usar un método getter generalizado como este:
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)))
Salidas:
Attribute value of attr1 is 1
Otro enfoque que podría ocultarlo aún mejor sería usar el método mágico __getattribute__, pero seguía obteniendo un bucle interminable que no podía resolver cuando intentaba recuperar el valor del atributo dentro de ese método.
También tenga en cuenta que puede utilizar alternativamente vars(). En el ejemplo anterior, podría intercambiar getattr(self,varname)por return vars(self)[varname], pero getattrpodría ser preferible según la respuesta a ¿Cuál es la diferencia entre varsy setattr? .