setattr可以在类或类的实例上使用:
>>> class C(object):
... pass
...
>>> myc = C()
>>> setattr(myc, "val1", 1)
>>> setattr(myc, "val2", 2)
>>> myc.val1
1
>>> myc.val2
2
>>>
但是,当我尝试设置属性时,出现了一些意外情况:
>>> setattr(myc, "val3", property(lambda self: 3))
>>> myc.val3
<property object at 0x7f4d2f30c418>
我将属性设置为类而不是实例时,得到了预期的行为:
>>> setattr(C, "val4", property(lambda self: 4))
>>> myc.val4
4
当我尝试在类的实例上设置属性时会发生什么情况?
您不能在实例上设置属性,因为您不能这样做。好吧,可以,但是正如您所发现的那样,它是行不通的。属性仅在类上设置时有效;这就是它的设计方式。有关基础功能(描述符)如何工作的详细信息,请参见描述符HowTo。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句