我有一个包含多个具有多个属性的对象的列表。通过一种方法,我打算修改某个对象的某些属性。我使用这种方法**args
是为了能够传递属性和值来修改,例如,(nombre='nuevo nombre', ID=123, direccion='Madrid)
我像字典一样遍历。但我不确定如何有效地访问对象的属性来修改它。
这是代码:
def mod_objeto(self, nombre, **atrs):
''' Modifica los atributos de un objeto'''
# Obtengo la posición de un objeto dentro de una lista.
pos = self.busca_servicio(nombre)
# Copio el objeto en obj
obj = self.lista_servicios[pos]
for atr, val in atrs.items():
obj.atr = val # No funciona
# Actualizo el objeto de la lista.
self.lista_servicios[pos] = obj
无需评估是否有更好的方法来执行您建议的操作,为此需要有关您的特定案例的更多信息,以便能够使用带有名称的字符串为属性分配值来识别它,您可以使用内置
setattr
:让我们根据您的代码创建一个小型简化示例:
正如我们分配 via 时发生
self.attr = valor
的那样,如果实例属性attr
不存在,它就会被创建。如果您想避免这种情况,通过在发生异常时抛出异常,您可以简单地for
利用hasattr
.也可以直接更新
__dict__
:但作为一般规则,不建议这样做,除此之外,这通常会忽略属性和描述符。显然它在用例中也不起作用
slots
。