我想以编程方式更改类的某些属性。
我发现,有setattr
功能,但是无法正常工作。
> obj.setattr('bar', 99)
'MyClass' object has no attribute 'setattr'
相反,我必须使用
> setattr(obj, 'bar', 99)
为什么是这样?我认为,在python中,对象的方法调用会将对象本身设置为第一个参数,因此两者的含义相同。
还是
Object
根本没有setattr
的定义? 最佳答案
object
setattr方法是__setattr__
:
>>> dir(object)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
使用
__setattr__('y', v)
时将调用x.y = v
。setattr
的帮助信息:setattr(x, 'y', v) is equivalent to ``x.y = v''.
所以
setattr(x, 'y', v)
等同于x.y = v
然后等同于x.__setattr__('y', v)
关于python - 为什么setattr不能用作方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24695095/