作者anrris ( ...)
看板Python
标题[问题] 如何让一个 attribute 成为 not writable 呢 ?
时间Thu Sep 30 12:56:16 2010
我今天写了一支测试用的程式 :
>>> from numpy import *
>>> L = arange(3*3).reshape(3,3)
>>> L
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> L.shape
(3, 3)
>>> L.size
9
>>> L.size = 4
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
L.size = 4
AttributeError: attribute 'size' of 'numpy.ndarray' objects is not writable
>>>
我的问题是 , 对於 numpy 让我产生的 L array 物件而言
L.size 显然是它的一个 attribute ..
但是当我要修改 size 的这个 attribute 的时候则会跑出来
'size' of 'numpy.ndarray' object is not writable 的错误讯息..
我今天尝试的想要模仿这样的情况, 自己写一个 class
让里面的某些 attribute 也是 not writable 的 ..
(我希望那些 attribute 可以被读取但是不能直接被外部更动 ..
可能有点类似 C++ 里面的 private 成员, 但是感觉上更直觉更方便)
上网找了半天都找不到相关的说明 ..
不知道有没有高手可以告诉我如何实做出来这样的功能
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 98.201.60.113
1F:推 sheauhei:用property? 09/30 13:33
3F:推 Falldog:overwrite __setattr__去判断 XD 09/30 13:41
4F:→ anrris:S 大的意思是否是将例子里面的set_x写成丢个error出来 ^^? 09/30 13:48
5F:→ anrris:这个方法感觉满不赖的 ^^ 09/30 13:49
6F:推 sbrhsieh:Non-data descriptor 09/30 23:00
9F:推 cobrasgo:转成tuple应该就可以了吧 10/01 12:37
10F:→ cobrasgo:class内部用list,传给外部转成tuple 10/01 12:37
11F:→ anrris:请问楼上的方法有简单实做的 code 吗 ? 10/02 05:43
12F:→ sbrhsieh:immutable attribute value/readonly attribute 是两回事 10/02 14:07