【发布时间】:2013-07-01 20:28:15
【问题描述】:
虽然我可能对property() 函数的作用感到非常困惑,但我正在尝试使用它来创建一个只读属性。理想情况下,我希望能够直接引用该属性,但不允许分配给它。在实验时,我得到了这个非常奇怪的行为:
>>> class Boo(object):
... def __init__(self, x):
... self.__x = x
... def getx(self):
... return self.__x
... x = property(getx)
...
>>> b = Boo(1)
>>> b.__x = 2
>>> b.getx()
1
>>> b.__x
2
我想补充一点,当我使用x 和_x 作为属性名称时,重新分配属性会导致getter 返回更改后的值,即b.getx() 和b.x/b._x给了我2。
我意识到我使用x 作为属性名称,但是当我尝试以下操作时,我在__init__() 中得到了一个AttributeError:
>>> class Boo(object):
... def __init__(self, x):
... self.__x = x
... def getx(self):
... return self.__x
... __x = property(getx)
...
>>> b = Boo(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
AttributeError: can't set attribute
【问题讨论】:
-
我想补充一点,我并没有试图获得一个真正的私有变量,只是一个在分配后无法修改的变量。 (我意识到我不能吃蛋糕也不能吃 - Python 不是 Java 等等。只是好奇
property()的行为以及我能走多远。)
标签: python oop python-2.7 properties