为什么setattr不能用作方法?

时间:2014-07-11 09:58:39

标签: python class python-2.7

我想以编程方式更改类的某些属性。

我发现,有setattr - 函数,但它不能像被删除一样工作。

> obj.setattr('bar', 99)
'MyClass' object has no attribute 'setattr'

相反,我必须使用

> setattr(obj, 'bar', 99)

这是为什么?我想,在python中,对象对方法的调用将对象本身设置为第一个参数,因此两者都应该是相同的。

Object根本没有setattr的定义?

1 个答案:

答案 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)