为何setattr不作为方法工作?
我想通过程序来改变一个类的某些属性。
我发现有一个叫 setattr
的函数,但它的表现和我预想的有点不一样。
> obj.setattr('bar', 99)
'MyClass' object has no attribute 'setattr'
相反,我必须使用
> setattr(obj, 'bar', 99)
这是为什么呢?我以为在 Python 中,调用一个对象的方法时,这个对象会自动作为第一个参数传进去,所以这两者应该是一样的。
或者说,Object
根本没有定义 setattr
这个方法?
1 个回答
3
在Python中,object
的设置属性方法叫做__setattr__
:
>>> dir(object)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
当你使用x.y = v
时,实际上会调用__setattr__('y', v)
这个方法。
关于setattr
的帮助信息是:
setattr(x, 'y', v) is equivalent to ``x.y = v''.
所以setattr(x, 'y', v)
和x.y = v
是一样的,进一步说,它们也等同于x.__setattr__('y', v)
。