Acceso a atributos dynamics de la clase Python

Quiero acceder a un atributo de clase por una cadena con su nombre.

Algo como:

class a: b=[] c='b' eval('a.'+c+'=1') 

Pero eso no funciona en Python. ¿Cómo puedo hacer esto?

Utilice setattr :

 In [1]: class a: ...: b = [] ...: In [2]: setattr(a, 'b', 1) In [3]: ab Out[3]: 1 

Utilice getattr para el reverso:

 In [4]: getattr(a, 'b') Out[4]: 1 In [5]: getattr(a, 'x', 'default') Out[5]: 'default' 

Sin embargo, sospecho que hay una mejor manera de lograr cualquiera que sea su objective. ¿Has intentado usar un diccionario en lugar de una clase?

eval es para evaluación, use exec para ejecutar instrucciones:

 exec('a.'+c+'=1') 

Sin embargo, considera el riesgo de usar ambos . Y puedes revisar esta respuesta para ver la diferencia entre expresiones y declaraciones.

Ya que está buscando establecer el atributo por nombre, setattr explicado en la respuesta de hop es una mejor práctica y más seguro que usar exec .