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

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

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

理論

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

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

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

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

 # 定義私有函數(shù),外界不可以直接訪問,但是可以通過【_類名__函數(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()

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

2、__xx__() 的使用

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

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

import time

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

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

  :param hour: 時
  :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):
  """顯示時間"""
  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__等,這些方法并不是私有成員哦,雖然它們以雙下劃線開頭,但是他們也是以雙下劃線結(jié)尾的,這種命名并不是私有成員的命名,

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

相關(guān)文章

  • 如何用Python來理一理紅樓夢里的那些關(guān)系

    如何用Python來理一理紅樓夢里的那些關(guān)系

    這篇文章主要介紹了用Python來理一理紅樓夢里的那些關(guān)系代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python標(biāo)準(zhǔn)庫uuid模塊(生成唯一標(biāo)識)詳解

    Python標(biāo)準(zhǔn)庫uuid模塊(生成唯一標(biāo)識)詳解

    uuid通過Python標(biāo)準(zhǔn)庫的uuid模塊生成通用唯一ID(或“UUID”)的一種快速簡便的方法,下面這篇文章主要給大家介紹了關(guān)于Python標(biāo)準(zhǔn)庫uuid模塊(生成唯一標(biāo)識)?的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python對驗證碼降噪的實現(xiàn)示例代碼

    python對驗證碼降噪的實現(xiàn)示例代碼

    這篇文章主要介紹了python對驗證碼降噪的實現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • django框架cookie和session用法實例詳解

    django框架cookie和session用法實例詳解

    這篇文章主要介紹了django框架cookie和session用法,結(jié)合實例形式詳細分析了Django框架cookie和session的功能、原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-12-12
  • python實現(xiàn)彈跳小球

    python實現(xiàn)彈跳小球

    這篇文章主要為大家詳細介紹了python實現(xiàn)彈跳小球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python 文件查找及內(nèi)容匹配方法

    python 文件查找及內(nèi)容匹配方法

    今天小編就為大家分享一篇python 文件查找及內(nèi)容匹配方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 深入理解Python虛擬機中復(fù)數(shù)(complex)的實現(xiàn)原理及源碼剖析

    深入理解Python虛擬機中復(fù)數(shù)(complex)的實現(xiàn)原理及源碼剖析

    在本篇文章當(dāng)中主要給大家介紹在 cpython 虛擬機當(dāng)中是如何實現(xiàn) 復(fù)數(shù) complex 這個數(shù)據(jù)類型的,這個數(shù)據(jù)類型在 cpython 當(dāng)中一應(yīng)該是一個算比較簡單的數(shù)據(jù)類型了,非常容易理解
    2023-03-03
  • python實現(xiàn)的web監(jiān)控系統(tǒng)

    python實現(xiàn)的web監(jiān)控系統(tǒng)

    這篇文章主要介紹了python實現(xiàn)的web監(jiān)控系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • python實現(xiàn)將兩個文件夾合并至另一個文件夾(制作數(shù)據(jù)集)

    python實現(xiàn)將兩個文件夾合并至另一個文件夾(制作數(shù)據(jù)集)

    這篇文章主要介紹了python實現(xiàn)將兩個文件夾合并至另一個文件夾(制作數(shù)據(jù)集),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python使用PDFMiner.six解析PDF數(shù)據(jù)詳解

    Python使用PDFMiner.six解析PDF數(shù)據(jù)詳解

    PDFMiner.six 是基于 PDFMiner 項目開發(fā)的增強版,用于從PDF文檔中提取文本和結(jié)構(gòu)信息,下面我們就來學(xué)習(xí)一下如何使用PDFMiner.six解析PDF數(shù)據(jù)吧
    2025-03-03

最新評論

万山特区| 遵化市| 封开县| 阜城县| 汶上县| 武夷山市| 兴安县| 拉孜县| 永善县| 中江县| 清新县| 泉州市| 海伦市| 南和县| 楚雄市| 衡阳市| 枣庄市| 通化市| 榆中县| 神农架林区| 平遥县| 青海省| 鹤峰县| 东光县| 丰顺县| 彩票| 肇庆市| 行唐县| 广水市| 苏尼特右旗| 赣州市| 志丹县| 桐乡市| 綦江县| 尉犁县| 清水河县| 防城港市| 武安市| 丰县| 东方市| 米脂县|