類的私有屬性:

網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了嘉陵免費建站歡迎大家使用!
__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。
在類內(nèi)部的方法中使用時 self.__private_attrs。
類的方法:
在類地內(nèi)部,使用def關鍵字可以為類定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self,且為第一個參數(shù)
類的私有方法 :
__private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調(diào)用。
在類的內(nèi)部調(diào)用 self.__private_methods
實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class JustCounter:
__secretCount = 0 # 私有變量
publicCount = 0 # 公開變量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 報錯,實例不能訪問私有變量
Python不允許實例化的類訪問私有數(shù)據(jù),但你可以使用 object._className__attrName 訪問屬性,將如下代碼替換以上代碼的最后一行代碼:
…………………….
print counter._JustCounter__secretCount
這樣就可以訪問私有屬性了
第一個參數(shù)寫self是指定為實例方法不是類方法、類方法要用@classmethod裝飾,
self其實也可以用必帶名字代替的。
具體可以參考這篇文章
class MyClass: def __init__(self): print "initialize..." def __play(self): print "play..." a = MyClass()initialize... a._MyClass__play()play... dir(a)['_MyClass__play', '__doc__', '__init__', '__module__']python的私有是偽的,還是可以訪問到。 方法就是_類名__方法名,python不過是在以__開頭的方法名面前加了小動作導致訪問不到看起來像私有方法。
python中怎么調(diào)用另一個程序?
1、自身函數(shù)調(diào)用:
自身函數(shù)的調(diào)用時相當方便的,在定義好了函數(shù)以后直接按定義的格式調(diào)用即可,出現(xiàn)的錯誤為參數(shù)數(shù)量不匹配,如:TypeError: func() missing 1 required positional argument: 's',意思為func()函數(shù)有一個形式參時但是沒有傳入相對應的實參值。
2、通過包或模塊調(diào)用:
通過包或模塊調(diào)用相對自身函數(shù)調(diào)用比較復雜,需要提前導入包或模塊,常用的方法為import 或者from import,導入成功的前提是對應的包或模塊在python路徑之下,可以通過sys.path(sys為系統(tǒng)內(nèi)置模塊可以直接使用import sys導入)來查看python路徑。以導入第三方包文件requests為例。
3、通過類方法調(diào)用:
通過類方法的調(diào)用需要在調(diào)用之前,實例化一個類對象,通過這個類對象來調(diào)用類方法,
注意第三個方法為私有方法,不允許類外部訪問。
封裝其實分為兩個層面,但無論哪種層面的封裝,都要對外界提供好訪問你內(nèi)部隱藏內(nèi)容的接口(接口可以理解為入口,有了這個入口,使用者無需且不能夠直接訪問到內(nèi)部隱藏的細節(jié),只能走接口,并且我們可以在接口的實現(xiàn)上附加更多的處理邏輯,從而嚴格控制使用者的訪問)
第一個層面的封裝(什么都不用做):創(chuàng)建類和對象會分別創(chuàng)建二者的名稱空間,我們只能用類名.或者obj.的方式去訪問里面的名字,這本身就是一種封裝。print(m1.brand) #實例化對象(m1.)
print(motor_vehicle.tag) #類名(motor_vehicle.)
-------------輸出結果---------注意:對于這一層面的封裝(隱藏),類名.和實例名.就是訪問隱藏屬性的接口
第二個層面的封裝:類中把某些屬性和方法隱藏起來(或者說定義成私有的),只在類的內(nèi)部使用、外部無法訪問,或者留下少量接口(函數(shù))供外部訪問。
Python中私有化的方法也比較簡單,即在準備私有化的屬性(包括方法、數(shù)據(jù))名字前面加兩個下劃線即可。
特征:私有屬性與私有方法不能從外部被調(diào)用,也不能被子類繼承
唯一寫法:在屬性或方法前面加上__(兩個下劃線)
我們寫一個簡單的例子,創(chuàng)建一個類,包含私有方法、私有屬性、普通方法、普通屬性,并生成一個實例
私有屬性和私有方法可以從內(nèi)部被調(diào)用(總不能我寫了,但是哪都不讓用吧)
我們試試在類里再加入一個新的方法,調(diào)用私有方法和屬性
可以看到,私有屬性和私有方法是可以在類內(nèi)部被調(diào)用的。
舉個私有屬性應用場景的例子
二。object類
我們試一下
三。多繼承
一個子類可以繼承多個父類,用逗號隔開
多個父類中有同名方法時,按照繼承順序進行調(diào)用
四。多態(tài)
當不同的實例,有同名的方法時,我們可以一個函數(shù),傳入不同的實例,執(zhí)行對應的方法。
我們定義一個貓和一個狗的類,兩個類中都有'叫'的方法。并各生成一個實例。
定義一個函數(shù),用函數(shù)來調(diào)用'叫'的方法
這就叫多態(tài)。
本文名稱:關于python私有函數(shù)訪問的信息
鏈接分享:http://chinadenli.net/article30/hipjso.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、搜索引擎優(yōu)化、、網(wǎng)站營銷、云服務器、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)