我想以编程方式更改类的某些属性。
我发现,有setattr
- 函数,但它不能像被删除一样工作。
> obj.setattr('bar', 99)
'MyClass' object has no attribute 'setattr'
相反,我必须使用
> setattr(obj, 'bar', 99)
这是为什么?我想,在python中,对象对方法的调用将对象本身设置为第一个参数,因此两者都应该是相同的。
或Object
根本没有setattr
的定义?
答案 0 :(得分:3)
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)