[问题] 隐藏类别中的属性

楼主: icetofux   2016-10-14 10:38:52
我在python 3.5.1的环境下做了一个简单的测试,想要做到类似其他程式语言中
"private"的功能:
test.py
1 class StateMachine:
2 def __init__(self):
3 self.__state = "IDLE"
4
5 def state(self):
6 return (self.__state)
7
8 sm = StateMachine()
9 print(sm.state())
10 sm.__state = "MOV"
11 print(sm.state())
输出结果如下:
c:\python test.py
IDLE
IDLE
作者: aweimeow (喵喵喵喵 ヽ( ・∀・)ノ)   2016-10-14 11:11:00
sm._StateMachine__state = "MOV"这样就可以改了,只是很不好 XD然后 sm.__state / sm._StateMachine__state 不一样所以原本放 sm.__state = "MOV" 的话再加一行 print(sm.__state) 就能看到 MOV
楼主: icetofux   2016-10-14 11:34:00
好像有点想通了,所以第10行的sm.__state = "MOV"只是产生一个全新的物件叫做sm.__state,然后对它赋值"MOV"对吗?
作者: aweimeow (喵喵喵喵 ヽ( ・∀・)ノ)   2016-10-14 11:40:00
就是帮 sm 这个物件加上一个 __state 属性并赋值可以 print(dir(sm)) 会发现他多出属性了 XD
作者: qiubite31 (so...?)   2016-10-15 10:52:00
要实作类似private属性,用property来作setter和getter应该比较好http://www.programiz.com/python-programming/property拍谢我缩一下https://goo.gl/Z4McqF

Links booklink

Contact Us: admin [ a t ] ucptt.com