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

Python 雙下劃線開頭的具體使用

 更新時間:2026年02月12日 09:52:35   作者:自由生長2024  
本文主要介紹了Python 雙下劃線開頭的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 Python 中,以兩個下劃線開頭(如 __method)的方法或?qū)傩裕⒉煌耆?ldquo;私有方法”(private method)——因?yàn)?Python 并沒有像 Java 或 C++ 那樣嚴(yán)格的訪問控制機(jī)制。但這種命名方式會觸發(fā)一種叫做 名稱改寫(name mangling)的機(jī)制,從而在一定程度上實(shí)現(xiàn)“私有性”。

1. 名稱改寫(Name Mangling)

當(dāng)你在一個類中定義一個以雙下劃線開頭、且不以雙下劃線結(jié)尾的方法或?qū)傩詴r,Python 解釋器會自動將其名稱改寫為:

_ClassName__original_name

例如:

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

    def __private_method(self):
        return "This is private"

obj = MyClass()
# obj.__private_method()  # AttributeError!
print(obj._MyClass__private_method())  # 可以訪問,但不推薦

雖然你仍然可以通過 _ClassName__name 的方式訪問到這個“私有”成員,但這是一種約定+語言機(jī)制,目的是防止子類意外覆蓋父類的內(nèi)部方法,也提示開發(fā)者“這是內(nèi)部使用的,不要直接調(diào)用”。

2. 與單下劃線的區(qū)別

  • 單下劃線開頭(如 _method):只是約定表示“內(nèi)部使用”,不會觸發(fā)名稱改寫,外部仍可訪問。
  • 雙下劃線開頭(如 __method):觸發(fā)名稱改寫,提供更強(qiáng)的封裝暗示。

3. 特殊方法(魔術(shù)方法)例外

注意:如果方法名前后都有兩個下劃線(如 __init__, __str__),這是 Python 的特殊方法(也叫魔術(shù)方法),不會被名稱改寫,也不表示私有,而是用于實(shí)現(xiàn)特定語言特性。

1. 類的特殊方法(魔術(shù)方法)

以雙下劃線開頭和結(jié)尾的方法,被稱為特殊方法或者魔術(shù)方法(Magic Methods)。這些方法由 Python 解釋器自動調(diào)用,我們可以通過重寫它們來實(shí)現(xiàn)特定的類行為。

示例

class MyClass:
    def __init__(self, value):  # 實(shí)例初始化方法
        self.value = value
    
    def __str__(self):  # 定義實(shí)例的字符串表示
        return f"MyClass(value={self.value})"
    
    def __add__(self, other):  # 定義加法操作
        return MyClass(self.value + other.value)
    
    def __len__(self):  # 定義長度
        return len(str(self.value))

常用的魔術(shù)方法

  • __init__:對象初始化
  • __str__ 和 __repr__:字符串表示
  • __len__:長度
  • __add__、__sub__、__mul__:算術(shù)運(yùn)算符
  • __eq____lt__、__gt__:比較運(yùn)算符
  • __iter__ 和 __next__:迭代器協(xié)議
  • __getitem__ 和 __setitem__:索引操作

4.與單下劃線的區(qū)別

  • 單下劃線(_method):這是一種約定,表示方法是受保護(hù)的(protected),不應(yīng)該在類外部直接使用。不過 Python 并不會強(qiáng)制限制這種訪問。
  • 雙下劃線(__method):會通過名稱修飾機(jī)制,讓方法更難以被外部訪問,主要用于避免子類命名沖突。

示例對比

class Parent:
    def _protected(self):  # 單下劃線
        return "受保護(hù)的方法"
    
    def __private(self):  # 雙下劃線
        return "私有的方法"

class Child(Parent):
    pass

c = Child()
print(c._protected())  # 可以正常調(diào)用
print(c._Parent__private())  # 可以訪問,但需要使用修飾后的名稱
print(c.__private())  # 報(bào)錯:AttributeError

4. 注意事項(xiàng)

  • 避免過度使用雙下劃線:除非確實(shí)需要防止子類覆蓋方法,否則建議使用單下劃線來表示約定上的私有性。
  • 特殊方法和私有方法:不要混淆特殊方法(如 __str__)和私有方法(如 __private)。特殊方法是 Python 語言的一部分,而私有方法是類設(shè)計(jì)的一種選擇。

總結(jié)

  • Python 沒有真正的“私有方法”。
  • __method 會被名稱改寫,起到模擬私有的作用。
  • 仍可通過 _ClassName__method 訪問,但應(yīng)避免這樣做。
  • 這是一種約定 + 語言機(jī)制,用于封裝和避免命名沖突。

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

相關(guān)文章

  • Python使用Matplotlib繪制基礎(chǔ)可視化圖表的完整指南

    Python使用Matplotlib繪制基礎(chǔ)可視化圖表的完整指南

    在Python中進(jìn)行數(shù)據(jù)可視化,最常用且功能強(qiáng)大的庫是?Matplotlib,它可以幫助你輕松繪制出柱狀圖,折線圖,餅圖,散點(diǎn)圖等,下面小編就和大家詳細(xì)介紹一下具體實(shí)現(xiàn)方法吧
    2026-05-05
  • Django3中的自定義用戶模型實(shí)例詳解

    Django3中的自定義用戶模型實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Django3中自定義用戶模型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python實(shí)現(xiàn)Logger打印功能的方法詳解

    Python實(shí)現(xiàn)Logger打印功能的方法詳解

    最近工作中遇到了打印的需求,通過查找相關(guān)的資料發(fā)現(xiàn)Python中Logger可以很好的實(shí)現(xiàn)打印,所以下面這篇文章主要給大家介紹了關(guān)于Python如何實(shí)現(xiàn)Logger打印功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-09-09
  • 基于Python實(shí)現(xiàn)俄羅斯方塊躲閃小游戲

    基于Python實(shí)現(xiàn)俄羅斯方塊躲閃小游戲

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)有趣的俄羅斯方塊躲閃小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • 用Python實(shí)現(xiàn)一個簡單的用戶系統(tǒng)

    用Python實(shí)現(xiàn)一個簡單的用戶系統(tǒng)

    大家好,本篇文章主要講的是用Python實(shí)現(xiàn)一個簡單的用戶系統(tǒng),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作

    pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作

    這篇文章主要介紹了pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 3個 Python 編程技巧

    3個 Python 編程技巧

    這篇文章主要介紹 Python 編程技巧,我們知道,字典的本質(zhì)是哈希表,本身是無法排序的,但 Python 3.6 之后,字典是可以按照插入的順序進(jìn)行遍歷的,這就是有序字典,其中的原理,可以閱讀為什么 Python3.6 之后字典是有序的。本文也會介紹該內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • 分享8點(diǎn)超級有用的Python編程建議(推薦)

    分享8點(diǎn)超級有用的Python編程建議(推薦)

    這篇文章主要介紹了分享8點(diǎn)超級有用的Python編程建議(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-10-10
  • 理想高通濾波實(shí)現(xiàn)Python opencv示例

    理想高通濾波實(shí)現(xiàn)Python opencv示例

    今天小編就為大家分享一篇關(guān)于理想高通濾波實(shí)現(xiàn)Python opencv示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python range函數(shù)之生成器函數(shù)的示例

    Python range函數(shù)之生成器函數(shù)的示例

    這篇文章主要介紹了Python range函數(shù)之生成器函數(shù)的示例,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論

天台县| 康平县| 囊谦县| 瓦房店市| 武胜县| 马龙县| 康定县| 偏关县| 永和县| 民乐县| 金昌市| 马关县| 延津县| 浮梁县| 灯塔市| 拜城县| 东山县| 布尔津县| 河东区| 阳新县| 周宁县| 柯坪县| 汉寿县| 定陶县| 福海县| 台前县| 屯昌县| 保亭| 神池县| 南宫市| 萨嘎县| 博罗县| 芦山县| 新昌县| 外汇| 威信县| 靖西县| 高密市| 麻江县| 平顺县| 彭阳县|