python 面向对象 私有化浅析
· 前言
近幾日,學校的python課程學到了面向對象這一塊內容,在做作業的時候看到老師布置的內容有關于getters、setters兩個方法的使用操作;可是老師既沒講清楚,度娘搜到的結果也模模糊糊,沒有介紹清楚這一概念,看文章說是被@property 裝飾器來替代了功能,以至于現在gettes、setters用法很少。(有興趣可以參考文章為什么不需要為Python對象添加 getter 和 setter)本來我對面向對象的了解也不是太多,現在我整理一下學習思路。
?
·私有屬性
Python的類里面默認的成員函數和成員變量都是公開的,Python?私有屬性和方法沒有類似別的語言的public,private等關鍵詞來修飾。 在python中定義私有變量只需要在變量名或函數名前加上 "__"兩個下劃線,那么這個函數或變量就會為私有的了。
(python內最簡單的一個類結構,包含公開變量和公開方法)
??
現在在__self__初始化函數內定義私有變量,無法在外部讀取私有變量,會報錯:沒有 “__num” 屬性。
·gettes、setters方法應用淺析:
定義getNum() 方式獲取私有變量__num值,setNum()方式更新私有變量__num值。
class Test(object): def __init__(self): self.__num = 100 def getNum(self): return self.__num def setNum(self,value)self.__num = valuet1 = Test() print(t1.getNum()) t1.setNum(200) print(t1.getNum())?
·私有屬性的其他一些騷操作
(1)新建一個py(soc.py)文件下面變量:
? ipython3在同目錄下打開,通過from xxx import *方式導入剛才的文件并嘗試訪問文件內的上述三個變量:
只有num1可以被訪問到,后面的下劃線開頭的和下劃線下劃線開頭的變量名稱都不能被訪問到。
可是如果用import XXX方式重新導入文件并訪問卻都可以做到:
?(2)命名重整
以前面的文件test的Test類為例,__init__方法內定義了一個私有變量__num,實例無法直接訪問到 ,根本原因其實是解釋器給__num變量換了一個名字:
(順便吹一波ipython工具的強大之處~~~)
? 在私有變量名稱前面加上了'_類名',組成新的變量名稱……_Test__num,可見python是很不期望實體能訪問到根類的私有變量的,這對于保密性具有很強的現實意義。
·總結
變量名類似于
(1)xxx? 公有變量
(2)_xxx 單前置下劃線,不可被 from xx import * 外部文件引用,類對象和子類能訪問
(3)__xxx 雙前置下劃線,避免與子類中變量名沖突,無法在外部直接訪問(沒職稱證所以訪問不到)
(4)__xxx__?雙前后置下劃線,用戶名字空間內置的魔法對象和方法,自己一般不要輕易定義
?
轉載于:https://www.cnblogs.com/Higgerw/p/10725810.html
總結
以上是生活随笔為你收集整理的python 面向对象 私有化浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js06--函数库jq与prototyp
- 下一篇: Python——Django学习笔记