【发布时间】:2012-06-01 10:06:27
【问题描述】:
代码如下:
def Property(func):
return property(**func())
class A:
def __init__(self, name):
self._name = name
@Property
def name():
doc = 'A''s name'
def fget(self):
return self._name
def fset(self, val):
self._name = val
fdel = None
print locals()
return locals()
a = A('John')
print a.name
print a._name
a.name = 'Bob'
print a.name
print a._name
以上产生以下输出:
{'doc': 'As name', 'fset': <function fset at 0x10b68e578>, 'fdel': None, 'fget': <function fget at 0x10b68ec08>}
John
John
Bob
John
代码取自from here。
问题:怎么了?它应该很简单,但我找不到。
注意:我需要属性来进行复杂的获取/设置,而不是简单地隐藏属性。
提前致谢。
【问题讨论】:
-
您是否 100% 确定
fset没有设置name而不是_name?容易犯的错误,并会解释你的症状.. -
@MartijnPieters 99.9% 我刚刚复制了代码和这段代码产生的输出 =)
-
有什么理由用这种奇怪的方式定义属性而不是仅仅使用
@property def name(...): "docstr" \n getter,@name.setter def name(...): setter? -
@delnan 这是他链接到的教程...
-
@delnan 原因是有一个大的
def而不是两个(或三个,或四个)小的def。
标签: python properties