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

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

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

在 Python 中,以兩個下劃線開頭(如 __method)的方法或屬性,并不完全是“私有方法”(private method)——因為 Python 并沒有像 Java 或 C++ 那樣嚴格的訪問控制機制。但這種命名方式會觸發(fā)一種叫做 名稱改寫(name mangling)的機制,從而在一定程度上實現(xiàn)“私有性”。

1. 名稱改寫(Name Mangling)

當你在一個類中定義一個以雙下劃線開頭、且不以雙下劃線結尾的方法或屬性時,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 的方式訪問到這個“私有”成員,但這是一種約定+語言機制,目的是防止子類意外覆蓋父類的內部方法,也提示開發(fā)者“這是內部使用的,不要直接調用”。

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

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

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

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

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

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

示例

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

常用的魔術方法

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

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

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

示例對比

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

class Child(Parent):
    pass

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

4. 注意事項

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

總結

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

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

相關文章

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

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

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

    Django3中的自定義用戶模型實例詳解

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

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

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

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

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

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

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

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

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

    3個 Python 編程技巧

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

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

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

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

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

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

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

最新評論

兴仁县| 务川| 进贤县| 肇州县| 江达县| 赤峰市| 灵川县| 乌拉特前旗| 喀喇沁旗| 连山| 锦州市| 长兴县| 江达县| 绥芬河市| 奉新县| 银川市| 德格县| 东兴市| 屯昌县| 新邵县| 宣城市| 迁西县| 元谋县| 新津县| 同江市| 弥渡县| 岳西县| 昌吉市| 梁山县| 锦州市| 中山市| 吐鲁番市| 金华市| 米脂县| 响水县| 保亭| 高密市| 大理市| 盱眙县| 确山县| 金阳县|