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

python里面單雙下劃線的區(qū)別詳解

 更新時間:2023年04月24日 08:31:06   作者:WTIAW.TIAW  
本文主要介紹了python里面單雙下劃線的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

區(qū)別:

  • xx:公有變量,所有對象都可以訪問;
  • xxx:雙下劃線代表著是系統(tǒng)定義的名字。
  • __xxx:雙前置下劃線,避免與子類中的屬性命名沖突,無法在外部直接訪問。代表著類中的私有變量名。
  • _xxx:單前置下劃線,私有化屬性和方法,類對象和子類可以訪問。不能用“from module import *”導入。
  • 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)

運行結(jié)果:

在前面加上“__”,表示它是私有成員,我們不能直接訪問。比如 “__xxx” 如果要訪問得通過 _class__xxx 的方式進行訪問。雖然不能防止修改私有屬性,但可以有效降低有意或者無意的修改。

示例代碼:

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)  # 報錯
print(obj._Test__text)
print(dir(obj))

運行效果:

從圖中可以看到雙下劃線開頭的變量,Python自動在前面加上了 “_class” 的前綴,所以我們訪問時也要加上相應的前綴才能正常訪問。

_xxx:一種約定,用來指定變量私有。程序員用來指定私有變量的一種方式。不能用from module import * 導入,其他方面和公有一樣訪問。

示例代碼:

#  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)

可以通過別的方式訪問這個類,修改我們的test2.py文件為以下內(nèi)容。

#  test2.py
import test
 
obj1 = test.Test1()
print(obj1)
obj2 = test._Test2()
print(obj2)

除了不能通過 from module import * 這種方式導入外,跟公有類并沒有差別。

運行效果:

__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__())

運行結(jié)果:

、

__name__:前面和后面加上下劃線代表著是系統(tǒng)定義的名字。普通變量不能使用此方式來命名。__name_表示當前模塊執(zhí)行過程中的名稱,如果該模塊執(zhí)行,則__name__的值為__main_,如果模塊是被導入的,則__name__的值為被導入的模塊的模塊名字。

__main__:表示整個工程開始運行的入口。

示例代碼:

#  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)文章

  • 對Python3之進程池與回調(diào)函數(shù)的實例詳解

    對Python3之進程池與回調(diào)函數(shù)的實例詳解

    今天小編就為大家分享一篇對Python3之進程池與回調(diào)函數(shù)的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 編程語言Python的發(fā)展史

    編程語言Python的發(fā)展史

    這篇文章主要介紹了編程語言Python的發(fā)展史,本文詳細介紹了Python語言的發(fā)展歷史,需要的朋友可以參考下
    2014-09-09
  • Python格式化字符串f-string的使用教程

    Python格式化字符串f-string的使用教程

    這篇文章主要為大家詳細介紹了Python中格式化字符串f-string的使用教程,文中通過示例為大家進行了詳細的介紹,需要的可以參考一下
    2022-07-07
  • Python中列表、字典、元組、集合數(shù)據(jù)結(jié)構(gòu)整理

    Python中列表、字典、元組、集合數(shù)據(jù)結(jié)構(gòu)整理

    這篇文章主要介紹了Python中列表、字典、元組、集合數(shù)據(jù)結(jié)構(gòu)整理,較為詳細的分析了這幾類數(shù)據(jù)結(jié)構(gòu)的具體用法及相關(guān)技巧,需要的朋友可以參考下
    2014-11-11
  • Python基于csv模塊實現(xiàn)讀取與寫入csv數(shù)據(jù)的方法

    Python基于csv模塊實現(xiàn)讀取與寫入csv數(shù)據(jù)的方法

    這篇文章主要介紹了Python基于csv模塊實現(xiàn)讀取與寫入csv數(shù)據(jù)的方法,結(jié)合實例形式分析了Python使用csv模塊針對csv文件的讀取與寫入相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 關(guān)于Python中的排列組合生成器詳解

    關(guān)于Python中的排列組合生成器詳解

    這篇文章主要介紹了關(guān)于Python中的排列組合生成器詳解,在Python的內(nèi)置模塊?functools中,提供了高階類?product()?,用于實現(xiàn)多個可迭代對象中元素的組合,返回可迭代對象中元素組合的笛卡爾積,效果相當于嵌套的循環(huán),需要的朋友可以參考下
    2023-07-07
  • pandas創(chuàng)建DataFrame的方式小結(jié)

    pandas創(chuàng)建DataFrame的方式小結(jié)

    今天給大家整理了pandas創(chuàng)建DataFrame的方式小結(jié),現(xiàn)在我們就來看看這三種生成Dataframe的方式,每種方式通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-09-09
  • Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip

    Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip

    這篇文章主要介紹了Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • pandas combine_first函數(shù)處理兩個數(shù)據(jù)集重疊和缺失

    pandas combine_first函數(shù)處理兩個數(shù)據(jù)集重疊和缺失

    combine_first是pandas中的一個函數(shù),它可以將兩個DataFrame對象按照索引進行合并,用一個對象中的非空值填充另一個對象中的空值,這個函數(shù)非常適合處理兩個數(shù)據(jù)集有部分重疊和缺失的情況,可以實現(xiàn)數(shù)據(jù)的補全和更新,本文介紹combine_first函數(shù)的語法及一些案例應用
    2024-01-01
  • 詳解在Python中使用OpenCV進行直線檢測

    詳解在Python中使用OpenCV進行直線檢測

    在圖像處理中,直線檢測是一種常見的算法,它通常獲取n個邊緣點的集合,并找到通過這些邊緣點的直線。本文將介紹如何在Python中利用OpenCV進行直線檢測,需要的可以參考一下
    2022-03-03

最新評論