亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:59日期:2022-07-19 11:11:12

理論

Python中不存在真正的私有方法。為了實(shí)現(xiàn)類似于c++中私有方法,可以在類的方法或?qū)傩郧凹右粋€“_”單下劃線,意味著該方法或?qū)傩圆粦?yīng)該去調(diào)用,它并不屬于API。但是,這只是一個形式上的約定,python并不阻止調(diào)用。 __雙下劃線的作用是避免覆蓋其內(nèi)容,實(shí)現(xiàn)的機(jī)制是在帶有雙下劃線的方法或?qū)傩郧凹由蟔類名的標(biāo)識。由于,python自動對方法和屬性進(jìn)行了改寫,所以直接調(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)或受保護(hù)的(protected),簡單的說就是不允許外界訪問,而對象的方法通常都是公開的(public),因?yàn)楣_的方法就是對象向外界提供的接口。 在Python中,屬性和方法的訪問權(quán)限只有兩種,也就是公開的和私有的,如果希望屬性是私有的,在給屬性命名時可以用 兩個下劃線作 為開頭, 下面的代碼可以驗(yàn)證這一點(diǎ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()

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

2、__xx__() 的使用

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

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

import timeclass 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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 天天鲁天天玩天天爽天天 | 日韩精品你懂的在线播放 | 国产精品一二区 | 日韩欧美一区二区三区四区 | 国产高清国内精品福利99久久 | 黄色高清视频在线观看 | 一级黄色片视频 | 欧洲免费无线码一二区 | 亚洲国产一区在线观看 | 亚洲加勒比久久88色综合一区 | 色aaa | 午夜看黄| 国产精品一区二区丝瓜 | 日韩精品在线一区 | 欧美蜜臀 | 性欧美激情在线观看 | 五月国产综合视频在线观看 | 日韩欧美第一区二区三区 | 国产成人免费视频 | 久久久久日韩精品免费观看网 | 欧美一级欧美一级毛片 | 国产精品7m凸凹视频分类大全 | 国产精品视频色拍拍 | 国产精品综合一区二区三区 | 欧美毛片日韩一级在线 | 伦理亚洲 | 欧美日韩一本大道香蕉欧美 | 日韩a级片 | 高清国产美女在线观看 | 中文一区二区视频 | 免费福利片| 99精品视频不卡在线观看免费 | 欧美日韩视频在线一区二区 | 大伊香蕉在线观看视频 wap | 精品在线免费观看 | 国产欧美精品区一区二区三区 | 中文字幕一级片 | 成人福利小视频 | a级午夜毛片免费一区二区 a级午夜理论免费毛片 | 成年免费大片黄在线观看岛国 | 99www综合久久爱com |