最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?私有屬性與私有方法

 更新時(shí)間:2022年03月01日 16:19:38   作者:軟件測(cè)試君  
這篇文章主要介紹了Python?私有屬性與私有方法,私有屬性是指在?Python?的面向?qū)ο箝_發(fā)過(guò)程中,對(duì)象的某些屬性只想在對(duì)象的內(nèi)部被使用,但不想在外部被訪問到這些屬,下面我們就進(jìn)入文章一起了解更多信息內(nèi)容吧

1. 場(chǎng)景定義

私有屬性:

是指在 Python 的面向?qū)ο箝_發(fā)過(guò)程中,對(duì)象的某些屬性只想在對(duì)象的內(nèi)部被使用,但不想在外部被訪問到這些屬性。

即:私有屬性是對(duì)象不愿意公開的屬性。

私有方法:

是指在 Python 的面向?qū)ο箝_發(fā)過(guò)程中,對(duì)象的某些方法或者稱為函數(shù)只想在對(duì)象的內(nèi)部被使用,但不想在外部被訪問到這些方法或函數(shù)。

即:私有方法是對(duì)象不愿意公開的方法或函數(shù)。

2. 語(yǔ)法定義

在 Python 中定義私有屬性和私有方法的語(yǔ)法如下:

class Staff:
? ? def __init__(self, s_name, s_salary):
? ? ? self.s_name = s_name
? ? ? self.__salary = s_salary
? ? ??
? ? def __secret(self):
? ? ? print("%s 的工資是 %d" % (self.s_name, self.__salary))
  • (1). __salary是以兩個(gè)下劃線開頭來(lái)定義的私有屬性。
  • (2). __secret(self)是以兩個(gè)下劃線開頭來(lái)定義的私有方法。

3. 調(diào)用分析

(1). 在__init__的對(duì)象初始化方法中,以兩個(gè)下劃線開頭定義的__salary屬性就是私有屬性。

現(xiàn)在在對(duì)象的外部來(lái)調(diào)用一下__salary屬性,看是否能正常訪問該私有屬性。

從上圖運(yùn)行結(jié)果可以看出,第11行,即在對(duì)象外部訪問對(duì)象的私有屬性 __salary 時(shí),提示 AttributeError 錯(cuò)誤,Staff 對(duì)象 zhangsan 沒有屬性 __salary。

為了證明 Staff 類對(duì)象確實(shí)是有__salary 這個(gè)實(shí)例屬性的,只是因?yàn)樵趯?duì)象外部不能訪問私有屬性。

我把 self.__salary 修改為:self.salary__secret(self)方法對(duì)self.__salary屬性的引用,做相應(yīng)的修改,看如下圖所示的運(yùn)行結(jié)果。

可以從運(yùn)行結(jié)果看出,這種非私有屬性在外部的調(diào)用是正常的,沒有提示 AttributeError 錯(cuò)誤。

(2). 在__secret(self) 實(shí)例方法中,以兩個(gè)下劃線開頭定義的__secret(self)方法就是私有方法。

和上面測(cè)試流程一樣,先在對(duì)象的外部來(lái)調(diào)用私有方法__secret(self),看是否能正常調(diào)用該私有方法。

從上圖運(yùn)行結(jié)果可以看出,第11行,即在對(duì)象外部訪問對(duì)象的私有方法__secret(self) 時(shí),提示 AttributeError 錯(cuò)誤,Staff 對(duì)象 zhangsan 沒有 __secret 方法。

為了證明 Staff 類對(duì)象是有__secret(self)這個(gè)實(shí)例方法的,只是因?yàn)樵趯?duì)象外部不能訪問私有方法。

我把 __secret(self) 方法修改為:secret(self),其他代碼不變,看如下圖所示的運(yùn)行結(jié)果。

可以從運(yùn)行結(jié)果看出,這種非私有方法在外部的調(diào)用是正常的,沒有提示 AttributeError 錯(cuò)誤。

(3). 從下圖可以看出,在對(duì)象內(nèi)部私有方法與私有屬性是可以被調(diào)用的。

如圖中的 work 方法調(diào)用了私有方法__secret(self),而私有方法__secret(self)調(diào)用了私有屬性__salary。

在對(duì)象外部使用 Staff 類對(duì)象 zhangsan 來(lái)調(diào)用 work 方法,可以間接訪問到對(duì)象的私有屬性和私有方法。

從控制臺(tái)輸出結(jié)果來(lái)看 work 方法能正常訪問到對(duì)象內(nèi)部定義的私有屬性和私有方法。

4. Python偽私有屬性和私有方法

在 Python 中,并沒有真正意義上的私有,因?yàn)?Python 內(nèi)部在給屬性、方法命名時(shí),對(duì)名稱做了一些特殊處理,使得外界無(wú)法訪問到對(duì)應(yīng)的屬性和方法。

以私有屬性和私有方法為例,Python內(nèi)部處理方式為:

  • (1). 屬性: __salary,經(jīng)過(guò)處理后的屬性名為:_Staff__salary(_類名__屬性名)
  • (2). 方法: __secret,經(jīng)過(guò)處理后的方法名為:_Staff__secret(_類名__方法名)

知道了 Python 內(nèi)部對(duì)于私有屬性和私有方法的處理,現(xiàn)在使用這種處理后的命名方式來(lái)在對(duì)象外部訪問私有屬性和私有方法,看是否能訪問正常。

class Staff:
? ? def __init__(self, s_name, s_salary):
? ? ? ? self.s_name = s_name
? ? ? ? self.__salary = s_salary

? ? def __secret(self):
? ? ? ? return "%s的工資是 %d" % (self.s_name, self.__salary)


zhangsan = Staff("張三", 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())

運(yùn)行結(jié)果如下圖所示:

控制臺(tái)沒有拋任何的異常,之前的提示 AttributeError 錯(cuò)誤也沒有了。

這個(gè)例子證明了 Python 是沒有真正意義上的私有的,當(dāng)知道了其內(nèi)部處理方式后,依然可以使用_類名__屬性名(方法名)的方法來(lái)在對(duì)象外部訪問到對(duì)象內(nèi)部定義的私有屬性和私有方法。

但這種方式在日常工作中是不推薦使用的,既然在對(duì)象內(nèi)部定義屬性和方法時(shí),就聲明了其為私有的,調(diào)用方就需要遵守其規(guī)則。

到此這篇關(guān)于Python 私有屬性與私有方法的文章就介紹到這了,更多相關(guān)Python私有屬性與私有方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python抽象類應(yīng)用詳情

    Python抽象類應(yīng)用詳情

    這篇文章主要介紹了Python抽象類應(yīng)用詳情,抽象類就是控制子類的方法的名稱,要求子類必須按照父類的要求的實(shí)現(xiàn)指定的方法,且方法名要和父類保持一致,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • python字典改變value值方法總結(jié)

    python字典改變value值方法總結(jié)

    在本文里小編給大家分享了關(guān)于python字典如何改變value值的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • 在Django中管理Users和Permissions以及Groups的方法

    在Django中管理Users和Permissions以及Groups的方法

    這篇文章主要介紹了在Django中管理Users和Permissions以及Groups的方法,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解(最新推薦)

    Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解(最新推薦)

    這篇文章主要介紹了Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Django框架反向解析操作詳解

    Django框架反向解析操作詳解

    這篇文章主要介紹了Django框架反向解析操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架相關(guān)定義、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • postman發(fā)送文件請(qǐng)求并以python服務(wù)接收方式

    postman發(fā)送文件請(qǐng)求并以python服務(wù)接收方式

    這篇文章主要介紹了postman發(fā)送文件請(qǐng)求并以python服務(wù)接收方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用PyWeChatSpy自動(dòng)回復(fù)微信拍一拍功能的實(shí)現(xiàn)代碼

    使用PyWeChatSpy自動(dòng)回復(fù)微信拍一拍功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了用PyWeChatSpy自動(dòng)回復(fù)微信拍一拍功能,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    正好最近在學(xué)習(xí)python,于是打算用python實(shí)現(xiàn)了數(shù)據(jù)導(dǎo)入導(dǎo)出工具,由于是新手,所以寫的有些不完善的地方還請(qǐng)見諒
    2015-07-07
  • Python 操作 MongoDB 講解詳細(xì)

    Python 操作 MongoDB 講解詳細(xì)

    MongoDB是一款開源的、基于分布式的、面向文檔存儲(chǔ)的非關(guān)系型數(shù)據(jù)庫(kù)。擁有高性能、高可用,易擴(kuò)展的優(yōu)點(diǎn),并且支持豐富的查詢語(yǔ)言來(lái)支持讀寫操作以及更復(fù)雜的查詢等。接下來(lái)我們來(lái)看一下如何使用Python操作MongoDB數(shù)據(jù)庫(kù)
    2021-09-09
  • ActiveMQ:使用Python訪問ActiveMQ的方法

    ActiveMQ:使用Python訪問ActiveMQ的方法

    今天小編就為大家分享一篇ActiveMQ:使用Python訪問ActiveMQ的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論

邵东县| 绥中县| 肇州县| 庄浪县| 铅山县| 温泉县| 凤城市| 巨野县| 南昌县| 荣成市| 宜兰市| 沅陵县| 比如县| 温州市| 长宁区| 易门县| 阿拉尔市| 玛曲县| 昆明市| 宝丰县| 军事| 阳朔县| 肥东县| 天门市| 安吉县| 从江县| 桂平市| 伊宁市| 烟台市| 垦利县| 田林县| 阳山县| 彭阳县| 新河县| 普格县| 满城县| 怀来县| 桦川县| 克什克腾旗| 旬邑县| 宜州市|