尽管我可能对该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
and_x
作为属性名称时,重新分配属性会导致 getter 返回更改后的值,即b.getx()
and b.x
/b._x
都给了我2
。
我意识到我正在使用x
作为属性名称,但是当我尝试以下操作时,我得到了AttributeError
一个__init__()
:
>>> 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