日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

知识点 - python 类的私有/保护 属性和方法

發布時間:2024/9/5 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 知识点 - python 类的私有/保护 属性和方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類的私有屬性:

__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。 在類內部的方法中使用時 self.__private_attrs。

類的方法:

在類地內部,使用def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數self,且為第一個參數

類的私有方法 :

__private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。 在類的內部調用 self.__private_methods

?

?

默認情況下,Python中的成員函數和成員變量都是公開的(public),在python中沒有類似public,private等關鍵詞來修飾成員函數和成員變量。
在python中定義私有變量只需要在變量名或函數名前加上?”__“兩個下劃線,那么這個函數或變量就是私有的了。
在內部,python使用一種?name mangling 技術,將 __membername替換成 _classname__membername,也就是說,類的內部定義中,
所有以雙下劃線開始的名字都被"翻譯"成前面加上單下劃線和類名的形式。

? ? ?例如:為了保證不能在class之外訪問私有變量,Python會在類的內部自動的把我們定義的__spam私有變量的名字替換成為
_classname__spam(注意,classname前面是一個下劃線,spam前是兩個下劃線),因此,用戶在外部訪問__spam的時候就會
提示找不到相應的變量。 ? python中的私有變量和私有方法仍然是可以訪問的;訪問方法如下:

私有變量:實例._類名__變量名 私有方法:實例._類名__方法名() class people():__place = "nanjing"_age1 = 20def __init__(self, name):self.name = namedef __sayhello(self):print("%s say hello" % self.name)class teacher(people):passt1 = teacher("cmz") print(t1._people__place) # 訪問私有變量 t1._people__sayhello() # 訪問私有方法 結果是 nanjing cmz say hello python私有屬性和方法案例

?


其實,Python并沒有真正的私有化支持,但可用下劃線得到偽私有。 ? 盡量避免定義以下劃線開頭的變量!

1)_xxx "單下劃線" 開始的成員變量叫做保護變量,意思是只有類實例和子類實例能訪問到這些變量,需通過類提供的接口進行訪問;不能用'from module import *'導入 (2)__xxx 類中的私有變量/方法名 (Python的函數也是對象,所以成員方法稱為成員變量也行得通。), " 雙下劃線 " 開始的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據。 (3)__xxx__ 系統定義名字,前后均有一個“雙下劃線” 代表python里特殊方法專用的標識,如 __init__()代表類的構造函數。 class people():__place = "nanjing"_age = 20def __init__(self, name):self.name = namedef _test(self):print("from people test")def __sayhello(self):print("%s say hello" % self.name)class teacher(people):passt1 = teacher("cmz") print(t1._age) print(people._age) t1._test() people._test(t1) # 傳入對象t1 結果是 20 20 from people test from people test 單下劃線 class people():__place = "nanjing"_age = 20def __init__(self, name):self.name = namedef __sayhello(self):print("%s say hello" % self.name)class teacher(people):passt1 = teacher("cmz") print(t1._people__place) t1._people__sayhello()結果是 nanjing cmz say hello 雙下劃線

?

轉載于:https://www.cnblogs.com/caimengzhi/p/8522002.html

總結

以上是生活随笔為你收集整理的知识点 - python 类的私有/保护 属性和方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。