覆盖属性->无法设置属性

你好,
为什么此代码失败?
B类(对象):
经过
b.testattr =属性(lambda s:" hallo")
b = b()
b.testattr ="测试"
Python 2.5.2(R252:60911,Jul 31 2008,17:28:52)
()中的/tmp/python-14202viu.py
14 B.testattr =属性(Lambda S:" Hallo")
15 b = b()
--- 16 b.testattr ="测试"
17
18
:无法设置属性
- -
格雷格

# 回答1


Gregor Horvath Schrieb:
好吧,我回答自己:-)
因为该属性中没有定义的fset函数.
在将属性元素重新列为另一个对象之前,我必须将attr降低.
- -
格雷格
# 回答2


8月22日,5:38*AM,Gregor Horvath 首先,属性()仅在上课时(而不是实例)时起作用.
因此,作业应为:b.testattr =属性(...)
其次,属性()在您示例中只定义一个getter
函数(第一个参数),而不是设置器函数(第二个
参数)它默认为仅阅读属性.这就是为什么
b.testattr ='test'仍将失败.
雷蒙德
# 回答3


雷蒙德·赫廷格(Raymond Hettinger)aécrit:
首先,属性()仅在上课时(而不是实例)时起作用.
因此,作业应为:b.testattr =属性(...)
嗯...您可能需要更仔细地重读OP代码! - )
# 回答4


格雷戈尔·霍瓦斯(Gregor Horvath)写道:
================================
b = b()#同义词
当b.testattr =" hallo"时,b.testattr也是如此
因此,如果在后续代码中:
b.testattr =属性(lambda s:" test")
然后:
b.testattr产生"测试"
除非B在两次之间实质上被摧毁/重复
这就是这样/为什么这样的方式:
gc =该死的型号到长的名字
GC.Something
好像是:
该死的型号到长的命名
steve nodeby@@hughes.net
# 回答5


Norseman aécrit:
================================
b = b()#同义词
不完全是.您可能错过了适用于B的通话操作员.
(狙击错误的解释).
# 回答6


Gregor Horvath aécrit:
它没有失败,它正是在做预期的事情.您做了testattr
仅通过不提供设置器来读取的属性.

标签: python

添加新评论