为何setattr不作为方法工作?

1 投票
1 回答
2755 浏览
提问于 2025-04-18 12:55

我想通过程序来改变一个类的某些属性。

我发现有一个叫 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)

撰写回答