python - 为什么只读属性可写?
我正在尝试在Python中定义一个只读属性的类;我参考了Python的文档,写出了以下代码:
#!/usr/bin/python
class Test:
def __init__(self, init_str):
self._prop = init_str
@property
def prop(self):
return self._prop
t = Test("Init")
print t.prop
t.prop = "Re-Init"
print t.prop
现在,当我尝试执行这段代码时,虽然我预期会出现错误或异常,但它却正常执行了:
$ ./python_prop_test
Init
Re-Init
我的Python版本是2.7.2。我看到的情况是正常的吗?我该如何确保一个属性是不可设置的?
2 个回答
4
要使用属性,你必须使用新式类。在Python 2中,要使用新式类,你需要从 object
这个类继承。把你的类定义改成 class Test(object)
这样就可以了。
24
为了让这个功能按你想的那样工作,Test
需要是一个新式类:
class Test(object):
^^^^^^^^
返回一个属性,用于 新式类(也就是从
object
继承的类)。
当我把 Test
改成新式类后,尝试修改 prop
时,我遇到了一个异常:
In [28]: t.prop='Re-Init'
AttributeError: can't set attribute