How do you programmatically set an attribute?

Question:

Suppose I have a python object x and a string s, how do I set the attribute s on x? So:

>>> x = SomeObject()
>>> attr = 'myAttr'
>>> # magic goes here
>>> x.myAttr
'magic'

What’s the magic? The goal of this, incidentally, is to cache calls to x.__getattr__().

Asked By: Nick

||

Answers:

setattr(x, attr, 'magic')

For help on it:

>>> 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''.

However, you should note that you can’t do that to a "pure" instance of object. But it is likely you have a simple subclass of object where it will work fine. I would strongly urge the O.P. to never make instances of object like that.

Answered By: Ali Afshar

Usually, we define classes for this.

class XClass( object ):
   def __init__( self ):
       self.myAttr= None

x= XClass()
x.myAttr= 'magic'
x.myAttr

However, you can, to an extent, do this with the setattr and getattr built-in functions. However, they don’t work on instances of object directly.

>>> a= object()
>>> setattr( a, 'hi', 'mom' )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'hi'

They do, however, work on all kinds of simple classes.

class YClass( object ):
    pass

y= YClass()
setattr( y, 'myAttr', 'magic' )
y.myAttr
Answered By: S.Lott

let x be an object then you can do it two ways

x.attr_name = s 
setattr(x, 'attr_name', s)
Answered By: vijay shanker

Also works fine within a class:

def update_property(self, property, value):
   setattr(self, property, value)
Answered By: d.raev

If you want a filename from an argument:

import sys

filename = sys.argv[1]

file = open(filename, 'r')

contents = file.read()

If you want an argument to show on your terminal (using print()):

import sys

arg = sys.argv[1]

arg1config = print(arg1config)
Answered By: Coder100
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.