Python Glossary English

все 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Сообщить о неточности