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

我发现,有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/

10-12 22:32