【发布时间】:2010-10-23 16:03:50
【问题描述】:
我想在 python 中创建一个具有一些属性的对象,并且我想保护自己免于意外使用错误的属性名称。代码如下:
class MyClass( object ) :
m = None # my attribute
__slots__ = ( "m" ) # ensure that object has no _m etc
a = MyClass() # create one
a.m = "?" # here is a PROBLEM
但是在运行这个简单的代码之后,我得到了一个非常奇怪的错误:
Traceback (most recent call last):
File "test.py", line 8, in <module>
a.m = "?"
AttributeError: 'test' object attribute 'm' is read-only
有没有聪明的程序员可以抽出一点时间来告诉我“只读”错误?
【问题讨论】:
-
这似乎是一个不必要的用例。你为什么做这个?你为什么不使用属性?
-
我想证明自己不要用错字写一个属性名称,例如,如果我写 object.my_prperty = 1 而不是 object.my_property = 1(错过了 'o'),python 将不会显示任何错误,但我的程序中会出现逻辑错误。所以我想将一个属性限制为我的预定义集,所以只有它们可以被访问。我如何用属性解决这个问题?
-
通常在 python 中,我们接受作业中拼写错误的可能性,并编写好的测试来捕捉肤浅和更多语义错误。我谦虚地建议,如果你想写 python,你应该考虑用 python 的方式来做,而不是和语言打架。我要补充一点,在过去的 9 年中,我的 python 代码中的拼写错误使我可能花费了 20 分钟。
-
您也可以查看 Python IDE。我通常使用 IDLE,其中(在 shell 中,而不是在 .py 文件中)你可以这样做:a=MyClass(),然后键入 a。它会告诉你所有的属性。我还使用了 PyDev,它是 Eclipse 的 Python 插件,它甚至可以在 .py 文件中执行此操作。那里还有很多其他人。谷歌或在这个网站上搜索“Python IDE”,我相信你会找到你喜欢的。
-
错误应该是
AttributeError: 'MyClass' object attribute 'm' is read-only
标签: python exception descriptor readonly-attribute