下面是代碼:Python的屬性不設置
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%我剛剛複製了代碼和這個代碼產生的輸出=) – tonytony
任何理由做這種奇怪的定義屬性的方式,而不是僅僅使用'@property def name(...):「docstr」\ n getter','@ name.setter def name(...):setter'? – delnan