Python中單下划線和雙下划線


雙下划線開頭和結尾

Python中存在一些特殊的方法,有些方法以雙下划線 “__” 開頭和結尾,它們是Python的魔法函數,比如__init__()和__str__等等。不用要這種方式命名自己的變量或者函數

class A:
     def __init__(self, text):
         self.text = text

     def __str__(self):
        return self.text

a = A("test")

print(a)  # 輸出test        

雙下划線開頭

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

class A:
    def __init__(self):
        self.__name = "text"

a = A()
print(a.__name)  # 報錯
print(a._A__name)  # 輸出text

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

單下划線開頭

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

文件內容

# A.py
class A:
    def __init__(self):
        self.text = "A"

class _B:
    def __init__(self):
        self.text = "B
# test.py
from A import *
a = A()
print(a.__dict__)

b = _B()
print(b.__dict__)

執行結果

可以看到我們導入了A.py中所有的類,但其實_B並沒有被導入,但是我們可以通過別的方式訪問這個類,修改我們的test.py文件為以下內容。

import A
a = A.A()
print(a.__dict__)

b = A._B()
print(b.__dict__)

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM