How do you programmatically set an attribute?

后端 未结 4 842
北荒
北荒 2020-11-22 04:41

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

>>> x =          


        
相关标签:
4条回答
  • 2020-11-22 05:13
    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''.
    

    Edit: However, you should note (as pointed out in a comment) 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.

    0 讨论(0)
  • 2020-11-22 05:29

    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
    
    0 讨论(0)
  • 2020-11-22 05:36

    Also works fine within a class:

    def update_property(self, property, value):
       setattr(self, property, value)
    
    0 讨论(0)
  • 2020-11-22 05:38

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

    x.attr_name = s 
    setattr(x, 'attr_name', s)
    
    0 讨论(0)
提交回复
热议问题