[問題] 隱藏類別中的屬性

作者: 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