python中單雙下劃線的區(qū)別對比分析
區(qū)別:
xx:公有變量,所有對象都可以訪問;
xxx:雙下劃線代表著是系統(tǒng)定義的名字。
__xxx:雙前置下劃線,避免與子類中的屬性命名沖突,無法在外部直接訪問。代表著類中的私有變量名。
_xxx:單前置下劃線,私有化屬性和方法,類對象和子類可以訪問。不能用“from module import *”導(dǎo)入。
xx_:單后置下劃線,用于避免與python關(guān)鍵字的沖突。
Python中存在一些特殊的方法,有些方法以雙下劃線 “__” 開頭和結(jié)尾,它們是Python的魔法函數(shù),比如__init__()和__str__等等。不用要這種方式命名自己的變量或者函數(shù)。
示例代碼:
class Test(object): def __init__(self, text): self.text = text def __str__(self): return self.text text = input("Please input text:") obj = Test(text) print(obj)
運(yùn)行結(jié)果:
在前面加上“__”,表示它是私有成員,我們不能直接訪問。比如 “__xxx” 如果要訪問得通過 _class__xxx 的方式進(jìn)行訪問。雖然不能防止修改私有屬性,但可以有效降低有意或者無意的修改。
示例代碼:
class Test(object): def __init__(self, text): self.__text = text self.__text2 = text def func(self): print(self.__text) def __str__(self): return self.__text text = input("Please input text:") obj = Test(text) print(obj) obj.func() # print(obj.__text) # 報(bào)錯(cuò) print(obj._Test__text) print(dir(obj))
運(yùn)行效果:
從圖中可以看到雙下劃線開頭的變量,Python自動(dòng)在前面加上了 “_class” 的前綴,所以我們訪問時(shí)也要加上相應(yīng)的前綴才能正常訪問。
_xxx:一種約定,用來指定變量私有。程序員用來指定私有變量的一種方式。不能用from module import * 導(dǎo)入,其他方面和公有一樣訪問。
示例代碼:
# test.py class Test1(object): def __init__(self): self.text = "my is text!" def __str__(self): return self.text class _Test2(object): def __init__(self): self.text = "my is text2!" def __str__(self): return self.text if __name__ == '__main__': obj1 = Test1() obj2 = _Test2() print(obj1) print(obj2)
可以通過別的方式訪問這個(gè)類,修改我們的test2.py文件為以下內(nèi)容。
# test2.py import test obj1 = test.Test1() print(obj1) obj2 = test._Test2() print(obj2)
除了不能通過 from module import * 這種方式導(dǎo)入外,跟公有類并沒有差別。
運(yùn)行效果:
__sizeof__() : 打印系統(tǒng)分配空間的大小。
示例代碼:
class Test(object): def __init__(self): self.__text = "my is text!" def func(self): print(self.__text) def __str__(self): return self.__text obj = Test() print(obj) print(dir(obj)) print("*" * 100) print(obj.func.__sizeof__()) print(obj.func.__sizeof__) print("*" * 100) print(obj.func().__sizeof__) print(obj.func().__sizeof__())
運(yùn)行結(jié)果:
__name__:前面和后面加上下劃線代表著是系統(tǒng)定義的名字。普通變量不能使用此方式來命名。__name_表示當(dāng)前模塊執(zhí)行過程中的名稱,如果該模塊執(zhí)行,則__name__的值為__main_,如果模塊是被導(dǎo)入的,則__name__的值為被導(dǎo)入的模塊的模塊名字。
__main__:表示整個(gè)工程開始運(yùn)行的入口。
示例代碼:
# test_name.py def func(): if __name__ == '__main__': print("my name is %s" % __name__) # my name is __main__ else: print("It's me: %s" % __name__) # It's me: test_name if __name__ == '__main__': func() # my name is __main__ # 在其它文件中 # test_name2.py import test_name test_name.func() # It's me: test_name
到此這篇關(guān)于python里面單雙下劃線的區(qū)別的文章就介紹到這了,更多相關(guān)python單雙下劃線的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python里使用正則表達(dá)式的組嵌套實(shí)例詳解
這篇文章主要介紹了python里使用正則表達(dá)式的組嵌套實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10python如何給內(nèi)存和cpu使用量設(shè)置限制
這篇文章主要介紹了python如何給內(nèi)存和cpu使用量設(shè)置限制,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python3.7環(huán)境下安裝Anaconda的教程圖解
這篇文章主要介紹了python3.7環(huán)境下安裝Anaconda的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09pytorch超詳細(xì)安裝教程之Anaconda、PyTorch和PyCharm全套安裝流程
這篇文章主要介紹了pytorch超詳細(xì)安裝教程之Anaconda、PyTorch和PyCharm全套安裝流程,介紹基于Anaconda環(huán)境以及PyCharm軟件結(jié)合,安裝PyTorch深度學(xué)習(xí)框架,需要的朋友可以參考下2023-04-04Python實(shí)現(xiàn)KNN(K-近鄰)算法的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)KNN(K-近鄰)算法的示例代碼,它主要用于對事物進(jìn)行分類。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一)
這篇文章主要介紹了使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一),本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10