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