欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中 _、__、__xx__()區(qū)別及使用場(chǎng)景

 更新時(shí)間:2020年06月30日 08:27:43   作者:PRO_Z  
這篇文章主要介紹了python中 _、__、__xx__() 區(qū)別及使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

理論

  • Python中不存在真正的私有方法。為了實(shí)現(xiàn)類似于c++中私有方法,可以在類的方法或?qū)傩郧凹右粋€(gè)“_”單下劃線,意味著該方法或?qū)傩圆粦?yīng)該去調(diào)用,它并不屬于API。但是,這只是一個(gè)形式上的約定,python并不阻止調(diào)用。
  • __雙下劃線的作用是避免覆蓋其內(nèi)容,實(shí)現(xiàn)的機(jī)制是在帶有雙下劃線的方法或?qū)傩郧凹由蟔類名的標(biāo)識(shí)。由于,python自動(dòng)對(duì)方法和屬性進(jìn)行了改寫(xiě),所以直接調(diào)用帶有雙下劃線的方法是調(diào)用不到的。
  • “xx”經(jīng)常是操作符或本地函數(shù)調(diào)用的magic methods。在上面的例子中,提供了一種重寫(xiě)類的操作符的功能。它是用于Python調(diào)用的。

1、訪問(wèn)權(quán)限(private、public)與繼承方式(只有public繼承)

在面向?qū)ο缶幊陶Z(yǔ)言中,類的屬性與方法都會(huì)設(shè)置訪問(wèn)控制權(quán)限,從而滿足我們的設(shè)計(jì)需求。一般而言,我們通常會(huì)將對(duì)象的屬性設(shè)置為私有的(private)或受保護(hù)的(protected),簡(jiǎn)單的說(shuō)就是不允許外界訪問(wèn),而對(duì)象的方法通常都是公開(kāi)的(public),因?yàn)楣_(kāi)的方法就是對(duì)象向外界提供的接口。 在Python中,屬性和方法的訪問(wèn)權(quán)限只有兩種,也就是公開(kāi)的和私有的,如果希望屬性是私有的,在給屬性命名時(shí)可以用 兩個(gè)下劃線作 為開(kāi)頭, 下面的代碼可以驗(yàn)證這一點(diǎn)。

class Test:
 def __init__(self, foo):
  self.__foo = foo  # 私有屬性

 # 定義私有函數(shù),外界不可以直接訪問(wèn),但是可以通過(guò)【_類名__函數(shù)名】去調(diào)用私有函數(shù)
 def __bar(self):
  print(self.__foo)
  print('__bar')

def main():
 """
 test = Test('hello')
 # AttributeError: 'Test' object has no attribute '__bar'
 test.__bar()
 # AttributeError: 'Test' object has no attribute '__foo'
 print(test.__foo)
 """
 
 # 使用以下這種方式就可以在類的外部調(diào)用類的私有屬性與方法
 test._Test__bar()
 print(test._Test__foo)

if __name__ == "__main__":
 main()

在實(shí)際開(kāi)發(fā)中,我們并不建議將屬性設(shè)置為私有的,因?yàn)檫@會(huì)導(dǎo)致子類無(wú)法訪問(wèn)。所以大多數(shù)Python程序員會(huì) 遵循一種命名慣例,就是讓屬性名以 單下劃線 開(kāi)頭來(lái)表示屬性是受保護(hù)的 ,本類之外的代碼在訪問(wèn)這樣的屬性時(shí)應(yīng)該要保持慎重。這種做法并不是語(yǔ)法上的規(guī)則,單下劃線開(kāi)頭的屬性和方法外界仍然是可以訪問(wèn)的,所以更多的時(shí)候它是一種暗示或隱喻,讓調(diào)用者知道這是不應(yīng)該直接訪問(wèn)的屬性或方法,而且這樣做并不影響子類去繼承這些東西。

2、__xx__() 的使用

  • 在python中,方法名如果是__xx__()的話,那么就有特殊的功能,因此叫做“魔法”方法;
  • 當(dāng)使用print輸出對(duì)象的時(shí)候,只要自己定義了__str__(self)方法,那么就會(huì)打印從在這個(gè)方法中return的數(shù)據(jù);
  • __str__()方法需要返回一個(gè)字符串,當(dāng)做這個(gè)對(duì)象的描寫(xiě)。

案例:定義一個(gè)類描述數(shù)字時(shí)鐘

import time

class Clock(object):
 """數(shù)字時(shí)鐘"""

 def __init__(self, hour=0, minute=0, second=0):
  """初始化方法

  :param hour: 時(shí)
  :param minute: 分
  :param second: 秒
  """
  self._hour = hour
  self._minute = minute
  self._second = second

 def run(self):
  """走字"""
  self._second += 1
  if self._second == 60:
   self._second = 0
   self._minute += 1
   if self._minute == 60:
    self._minute = 0
    self._hour += 1
    if self._hour == 24:
     self._hour = 0

 def __str__(self):
  """顯示時(shí)間"""
  return '%02d:%02d:%02d' %(self._hour, self._minute, self._second)


def main():
 clock = Clock(23, 59, 58)
 while True:
  print(clock)
  time.sleep(1)
  clock.run()

if __name__ == '__main__':
 main()

注意:Python類中的那些魔法方法,如__str__、__repr__等,這些方法并不是私有成員哦,雖然它們以雙下劃線開(kāi)頭,但是他們也是以雙下劃線結(jié)尾的,這種命名并不是私有成員的命名,

到此這篇關(guān)于python中 _、__、__xx__()區(qū)別及使用場(chǎng)景的文章就介紹到這了,更多相關(guān)python  _、__、__xx__() 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python數(shù)據(jù)可視化JupyterLab實(shí)用擴(kuò)展程序Mito

    python數(shù)據(jù)可視化JupyterLab實(shí)用擴(kuò)展程序Mito

    這篇文章主要為大家介紹了python數(shù)據(jù)可視化JupyterLab實(shí)用擴(kuò)展程序Mito的功能應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • python requests 使用快速入門

    python requests 使用快速入門

    這篇文章主要介紹了python requests 使用快速入門教程,使用 Requests 發(fā)送網(wǎng)絡(luò)請(qǐng)求非常簡(jiǎn)單,具體操作方法,大家參考下本文吧
    2017-08-08
  • Python編碼規(guī)范擺脫P(yáng)ython編碼噩夢(mèng)

    Python編碼規(guī)范擺脫P(yáng)ython編碼噩夢(mèng)

    Python 中編碼問(wèn)題,一直是很多 Python 開(kāi)發(fā)者的噩夢(mèng),盡管你是工作多年的 Python 開(kāi)發(fā)者,也肯定會(huì)經(jīng)常遇到令人神煩的編碼問(wèn)題,收藏這篇文章以后你可以不用再Google
    2021-10-10
  • pygame實(shí)現(xiàn)滑塊接小球游戲

    pygame實(shí)現(xiàn)滑塊接小球游戲

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)滑塊接小球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Flask核心機(jī)制之上下文源碼剖析

    Flask核心機(jī)制之上下文源碼剖析

    這篇文章主要介紹了Flask核心機(jī)制之上下文源碼剖析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理)

    python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理)

    今天小編就為大家分享一篇python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 用python寫(xiě)掃雷游戲?qū)嵗a分享

    用python寫(xiě)掃雷游戲?qū)嵗a分享

    我們給大家分享了一篇關(guān)于用python寫(xiě)一個(gè)掃雷經(jīng)典游戲的實(shí)例代碼,大家可以測(cè)試運(yùn)行下。
    2018-05-05
  • Python實(shí)現(xiàn)針對(duì)中文排序的方法

    Python實(shí)現(xiàn)針對(duì)中文排序的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)針對(duì)中文排序的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python針對(duì)中文進(jìn)行排序操作出現(xiàn)的問(wèn)題與相關(guān)處理技巧,需要的朋友可以參考下
    2017-05-05
  • 在python中利用最小二乘擬合二次拋物線函數(shù)的方法

    在python中利用最小二乘擬合二次拋物線函數(shù)的方法

    今天小編就為大家分享一篇在python中利用最小二乘擬合二次拋物線函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python中的默認(rèn)參數(shù)實(shí)例分析

    Python中的默認(rèn)參數(shù)實(shí)例分析

    這篇文章主要介紹了Python中的默認(rèn)參數(shù)實(shí)例分析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論