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

一文詳解Python中的單下劃線_?、雙下劃線__

 更新時間:2026年03月18日 09:27:50   作者:GeekPMAlex  
在Python開發(fā)中,單下劃線(_)和雙下劃線(__)作為命名修飾符,承擔著不同的語義和功能,它們不僅是代碼規(guī)范的組成部分,更是實現(xiàn)模塊化、封裝性和特殊行為的關鍵工具,這篇文章主要介紹了Python中單下劃線_?、雙下劃線__的相關資料,需要的朋友可以參考下

很多人從Go/Java轉(zhuǎn)Python的同學會疑惑

為什么python類的默認構(gòu)造函數(shù)是 init? 不是__init 不是init__ 或者_init_ ?

其實是因為python的語法導致的。Python 里面沒有pubcli private,甚至默認所有的類的屬性都是公開的。讓我們回想一下 **Python 的“訪問控制”哲學: “We are all consenting adults.”(我們都是有共識的成年人)。

Python 不強制限制你訪問任何屬性或方法,而是相信開發(fā)者知道自己在做什么。

特性Java / C++Python
public顯式聲明默認就是公開的
private編譯器強制禁止外部訪問沒有真正的私有,只有約定
封裝性通過訪問修飾符強制實現(xiàn)通過命名約定 + 文檔 + 信任實現(xiàn)

單下劃線_ 、雙下劃線__ 開頭或者結(jié)尾的區(qū)別

開頭/結(jié)尾的命名具有不同的語義和用途。它們不是語法強制的訪問控制,而是約定(convention)或語言機制(如名稱改寫、特殊方法)

命名形式是否特殊處理用途說明能否外部訪問建議外部使用代碼示例
_xxx? 否內(nèi)部實現(xiàn)(約定)? 能用作“受保護”成員print(a._xxx)
__xxx? 是(改名)避免子類命名沖突? 能(改名后)用于需隔離的內(nèi)部屬性print(a._A__xxx)
_xxx_? 否無特殊含義? 能避免使用print(a._xxx_)
__xxx__? 是魔術方法(語言保留)? 能只用于標準魔術方法print(a.__xxx__())

在 Python 中,以單下劃線 _ 或雙下劃線 __ 開頭/結(jié)尾的命名具有不同的語義和用途。它們不是語法強制的訪問控制,而是約定(convention)或語言機制(如名稱改寫、特殊方法)。下面詳細解釋四種常見形式的區(qū)別:

1._xxx——“內(nèi)部使用”約定(Protected by convention)

含義:

  • 表示這是一個內(nèi)部實現(xiàn)細節(jié),不應被外部代碼直接依賴。
  • 是一種軟性提示,不是強制限制。

特點:

  • 可以正常訪問:obj._xxx ?
  • 不會被 from module import * 導入(模塊級別)
  • 常用于“受保護”的屬性或方法(類似其他語言的 protected

示例:

class MyClass:
    def __init__(self):
        self._internal = 42

obj = MyClass()
print(obj._internal)  # 完全合法,但“不推薦”直接用

?? 用途:告訴其他開發(fā)者:“這是我的私有實現(xiàn),未來可能變動,請別依賴它。”

2.__xxx——名稱改寫(Name Mangling)

含義:

  • Python 自動重命名該屬性,避免子類意外覆蓋父類同名屬性。
  • 不是為了隱私或安全,而是解決命名沖突。

特點:

  • 在類 MyClass 中定義 __private,實際存儲為 _MyClass__private
  • 仍可從外部訪問:obj._MyClass__private ?
  • 僅在類定義內(nèi)生效(必須出現(xiàn)在類作用域中)

示例:

class Parent:
    def __init__(self):
        self.__secret = "parent"

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.__secret = "child"  # 不會覆蓋父類的 __secret!

c = Child()
print(c._Parent__secret)  # 輸出: parent
print(c._Child__secret)   # 輸出: child

?? 用途:防止子類“不小心”覆蓋父類的內(nèi)部屬性。

3._xxx_——通常無特殊含義(但建議避免)

含義:

  • 前后各一個下劃線,Python 不會對此做任何特殊處理。
  • 容易與魔術方法混淆,因此官方建議避免這種命名

注意:

  • 不是魔術方法(魔術方法是 __xxx__
  • 可能讓人誤以為是特殊用途

示例(不推薦):

class BadExample:
    def _method_(self):  # ? 看起來怪怪的,像拼寫錯誤
        pass

?? PEP 8 建議:不要使用 _xxx_ 這種形式,除非你有非常特殊的理由。

4.__xxx__——魔術方法 / 特殊方法(Magic Methods)

含義:

  • Python 保留給語言本身使用的特殊方法。
  • 用于實現(xiàn)運算符重載、內(nèi)置函數(shù)支持、對象協(xié)議等。

特點:

  • 由 Python 解釋器在特定場景自動調(diào)用
  • 永遠不要自己發(fā)明 __xxx__ 名字(除非是文檔定義的標準方法)

示例:

class Vector:
    def __init__(self, x):
        self.x = x
    
    def __add__(self, other):      # 支持 +
        return Vector(self.x + other.x)
    
    def __str__(self):             # 支持 str() 和 print()
        return f"Vector({self.x})"

?? 用途:讓自定義對象支持 +, len(), print(), with, for 等語言特性。

?? 重要:不要創(chuàng)建自己的 __my_custom_method__!這屬于 Python 保留命名空間。

總結(jié)對比表

命名形式是否特殊處理用途說明能否外部訪問建議
_xxx? 否內(nèi)部實現(xiàn)(約定)? 能用作“受保護”成員
__xxx? 是(改名)避免子類命名沖突(名稱改寫)? 能(改名后)用于真正需要隔離的內(nèi)部屬性
_xxx_? 否無特殊含義? 能避免使用
__xxx__? 是魔術方法(語言保留)? 能只用于標準魔術方法

附加建議(來自 PEP 8)

  • __double_leading_and_trailing__: 僅用于魔術方法
  • _single_leading_underscore: 表示內(nèi)部使用
  • __double_leading_underscore: 觸發(fā)名稱改寫
  • 不要使用 _single_trailing_underscore_,除非是為了避免與關鍵字沖突(如 class_

記住一句話:

“Python 給你自由,但也期望你遵守約定。”
下劃線不是鎖,而是禮貌的提醒

到此這篇關于Python中單下劃線_ 、雙下劃線__的文章就介紹到這了,更多相關 Python單下劃線_ 、雙下劃線__內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解

    對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解

    今天小編就為大家分享一篇對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python運行時強制刷新緩沖區(qū)的方法

    python運行時強制刷新緩沖區(qū)的方法

    今天小編就為大家分享一篇python運行時強制刷新緩沖區(qū)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django框架中間件(Middleware)用法實例分析

    Django框架中間件(Middleware)用法實例分析

    這篇文章主要介紹了Django框架中間件(Middleware)用法,結(jié)合實例形式分析了Django框架中間件(Middleware)的功能、用法及相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python+OpenCV 實現(xiàn)簡單的高斯濾波(推薦)

    Python+OpenCV 實現(xiàn)簡單的高斯濾波(推薦)

    這篇文章主要介紹了Python+OpenCV 實現(xiàn)簡單的高斯濾波,在文中需要注意的是,這里我沒有特判當sigma = 0的時候的情況,具體實現(xiàn)過程跟隨小編一起看看吧
    2021-09-09
  • python數(shù)據(jù)可視化之條形圖畫法

    python數(shù)據(jù)可視化之條形圖畫法

    這篇文章主要為大家詳細介紹了python數(shù)據(jù)可視化之條形圖畫法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python 命令行非阻塞輸入的小例子

    Python 命令行非阻塞輸入的小例子

    很久很久以前,系windows平臺下,用C語言寫過一款貪食蛇游戲,cmd界面,用kbhit()函數(shù)實現(xiàn)非阻塞輸入。系windows平臺下用python依然可以調(diào)用msvcrt.khbit實現(xiàn)非阻塞監(jiān)聽。但系喺linux下面就冇呢支歌仔唱
    2013-09-09
  • Python自動化實戰(zhàn)之接口請求的實現(xiàn)

    Python自動化實戰(zhàn)之接口請求的實現(xiàn)

    本文為大家重點介紹如何通過 python 編碼來實現(xiàn)我們的接口測試以及通過Pycharm的實際應用編寫一個簡單接口測試,感興趣的可以了解一下
    2022-05-05
  • 兩個使用Python腳本操作文件的小示例分享

    兩個使用Python腳本操作文件的小示例分享

    這篇文章主要介紹了兩個使用Python腳本操作文件的小示例分享,兩個程序包括創(chuàng)建和讀寫文件等功能,需要的朋友可以參考下
    2015-08-08
  • python 深入了解GIL鎖詳細

    python 深入了解GIL鎖詳細

    這篇文章主要介紹了python 深入了解GIL鎖,python的使用者都知道Cpython解釋器有一個弊端,真正執(zhí)行時同一時間只會有一個線程執(zhí)行,這是由于設計者當初設計的一個缺陷,里面有個叫GIL鎖的,但他到底是什么,接下來和小編一起進入下面文章詳細內(nèi)容吧
    2021-10-10
  • Python中對數(shù)據(jù)庫的操作詳解

    Python中對數(shù)據(jù)庫的操作詳解

    今天簡單說說MySQL,我們存儲數(shù)據(jù),直接用本地文件即可,但是,本地文件不利于存放海量數(shù)據(jù),也不利于用程序?qū)ξ募臄?shù)據(jù)進行查詢與管理,我們可以使用數(shù)據(jù)庫
    2023-02-02

最新評論

克拉玛依市| 黎城县| 禄劝| 佛坪县| 左云县| 井冈山市| 邵阳市| 台湾省| 盐山县| 乾安县| 织金县| 庆城县| 阳朔县| 永丰县| 清流县| 高邮市| 泸水县| 禄劝| 阆中市| 恩平市| 邢台县| 唐山市| 阳朔县| 宁德市| 康平县| 安龙县| 福建省| 武冈市| 乌兰浩特市| 河东区| 南陵县| 和平区| 夏邑县| 永和县| 金寨县| 宜君县| 西充县| 关岭| 大洼县| 湖北省| 察隅县|