0

以下是我的python 2.7控制檯的輸出。我一直在用python 3編寫類似的東西,它按預期工作。那麼,爲什麼我允許做以下的重新分配(在Python 2.7):寫入python屬性顯示意外的行爲

>>> class Fola: 
...  def __init__(self,a,b): 
...   self._a = a 
...   self._b = b 
...  @property 
...  def a(self): 
...   return self._a 
... 
>>> m = Fola('mlem','blib') 
>>> m.a 
'mlem' 
>>> m._b 
'blib' 
>>> m._a 
'mlem' 
>>> m.a = 'plip' 
>>> m.a 
'plip' 
>>> m._a 
'mlem' 
>>> m._b 
'blib' 

回答

0

感覺就像「喜歡」 FB上的一個自費出版的職位,但我會寫 約了部分答案無論如何,修復。

定義Class Fola(object)時明確提及的對象解決了這個問題。我將'爲什麼這個行爲'這個問題留給SO社區,因爲我現在正面臨着通過python 2.7文檔缺乏時間的問題。

>>> class Fola(object): 
... def __init__(self,a,b): 
...  self._a = a 
...  self._b = b 
... @property 
... def a(self): 
...  return self._a 
... 
>>> m = Fola(1,2) 
>>> m.a 
1 
>>> m._b 
2 
>>> m.a 
1 
>>> m._a 
1 
>>> m.a = 10 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: can't set attribute