python - 以下劃線開頭的變數和函式
阿新 • • 發佈:2021-11-09
變數名的分類:
以數字字母開頭:正常的公有變數,如:a=1, def a()
以單下劃線開頭:半私有,如:_b = 2, def _bb()
以雙下劃線開頭:私有,如:__c = 3, def __cc()
以雙下劃線開頭雙下劃線結尾:內建屬性名或魔法方法名,如:__name__, __dir__
公有
任何人都可以使用
半私有
1. 類外
類外的半私有物件、私有物件,功能一致,均是在本模組中可以正常使用,但是不能被直接匯入並呼叫
如果一定要在模組外使用,那麼需要匯入本模組,然後使用(模組名.變數名)進行呼叫
2. 類中
類中的半私有物件,僅僅是概念上的私有,預設不要在類外進行呼叫
實際在類外,均可以使用(例項名.變數名/類名.變數名)進行呼叫
私有
1. 類外
同半私有一樣
2. 類中
類中的私有物件,在類外均不能直接呼叫,可以理解為真私有
但是python沒有完全私有的物件,此種物件可以通過矯直在類外進行呼叫的(在私有屬性名、私有方法名前新增(_類名))
魔法方法
這是python自己實現的屬性和方法,一般不允許以這種方式自定義屬性或方法
半私有舉例:
在d2.py中呼叫d1.py中的半私有函式
d1.py
def _init(): global _global_dict _global_dict = {} def set_value(key, value): _global_dict[key]= value def get_value(key): return _global_dict[key]
d2.py
import d1 # 匯入d1模組 d1._init() # 使用模組名.函式名進行呼叫 d1.set_value('name1', 'zhangsan') print(d1.get_value('name1'))
d2.py(以下會報錯)
from d1 import * _init() # 會提示錯誤:Unresolved reference '_init'
d2.py(以下不報錯,這是為啥子呢?)
from d1 import _init _init()# 不報錯