>>> help(setattr)Help on built-in function setattr in module __builtin__:
setattr(...)
setattr(object, name, value)Set a named attribute on an object; setattr(x,'y', v)is equivalent to
``x.y = v''.
Изменить: Тем не менее, вы должны отметить (как указано в комментарии), что вы не можете сделать это с «чистым» экземпляром object. Но, скорее всего, у вас есть простой подкласс объекта, где он будет работать нормально. Я настоятельно призываю ОП никогда не создавать экземпляры таких объектов.
Осторожно, однако, это не работает в вашем сценарии, когда вы создаете экземпляр объекта ().
S.Lott
3
Абсолютно верно, это не так. Я удобно проигнорировал это. Я настоятельно призываю ОП никогда не создавать экземпляры таких объектов.
Али Афшар
2
Черт, но это работает не во всех случаях, так как это было бы действительно полезно, например, для добавления dirtyатрибута к пользовательскому вводу ...
brice
1
@Brice: setattr работает практически во всех случаях. Из соображений эффективности и других причин «объект» запрограммирован так, что вы не можете добавить к нему дополнительные атрибуты. Вы можете сделать это с вашим собственным классом с __slots__атрибутом.
dirkjot
4
Это не работает, intа также. Вы можете объяснить, почему? (это на всех __builtin__?
Тем не менее, вы можете, до некоторой степени, сделать это с setattrи getattrвстроенными функциями. Тем не менее, они не работают на случаяхobject напрямую.
>>> a= object()>>> setattr( a,'hi','mom')Traceback(most recent call last):File"<stdin>", line 1,in<module>AttributeError:'object' object has no attribute 'hi'
Они, однако, работают на всех видах простых классов.
dirty
атрибута к пользовательскому вводу ...__slots__
атрибутом.int
а также. Вы можете объяснить, почему? (это на всех__builtin__
?Обычно мы определяем классы для этого.
Тем не менее, вы можете, до некоторой степени, сделать это с
setattr
иgetattr
встроенными функциями. Тем не менее, они не работают на случаяхobject
напрямую.Они, однако, работают на всех видах простых классов.
источник
пусть x будет объектом, тогда вы можете сделать это двумя способами
источник