我试图在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。我所看到的,是否有望?如何确保属性不可设置?
答案 0 :(得分:24)
为了使其按预期工作,Test
必须是新式的类:
class Test(object):
^^^^^^^^
中暗示了这一点
返回新样式类的属性属性(派生自
object
的类)。
当我将Test
转换为新式课程并尝试更改prop
时,我得到一个例外:
In [28]: t.prop='Re-Init'
AttributeError: can't set attribute
答案 1 :(得分:4)
要使用属性,必须使用新式类。要在Python 2中使用新式类,必须从object
继承。将您的班级def更改为class Test(object)
。