雙下划線開頭和結尾
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 * 這種方式導入外,跟公有類並沒有差別