все Python 3Встроенные функциипонятие
setattr
ООП
Устанавливает атрибут объекта по имени. Эквивалент obj.name = value, но позволяет задать имя атрибута динамически как строку.
Синтаксис
setattr(object, name, value)
Брать setattr стоит только когда имя атрибута реально вычисляется в рантайме (пришло из конфига, цикла, пользовательского ввода); если имя известно заранее, обычное obj.x = value читается лучше и опечатку в нём заметит IDE, а в строке — никто. Имя не проверяется на то, что оно валидный идентификатор: setattr(obj, 'my attr', 1) спокойно создаст запись в __dict__, до которой потом не добраться иначе как через getattr. На объектах без __dict__ — со __slots__ или встроенных типах вроде int и str — попытка упирается в AttributeError.
Примеры
class A: pass
a=A()
setattr(a,'x',42)
print(a.x) # → 42
for name,val in [('p',1),('q',2)]:
setattr(a,name,val)
print(a.p, a.q) # → 1 2
setattr(a,'lst',[])
a.lst.append(1)
print(a.lst) # → [1]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности