單下劃線開頭()
在模塊中使用單下劃線開頭
模塊中使用單下劃線()開頭定義函數、全局變量和類不能被模塊外部以: from module import *形式導入。
但可以用:from module import _func形式單獨導入。
當然定義函數、全局變量和類前面有2個或者更多下劃線開頭也不可以用 from module import *的形式導入。
# 單下劃線開頭的函數
def _my_abs(num):
return 'my_abs:' + str(abs(num))
# 單下劃線開頭的全局變量
_My_var
# 單下劃線開頭的類
_My_Class:
pass
在類中使用單下劃線開頭
帶單下劃線的類變量、實例變量和方法,允許類內部、類實例和子類訪問,不受限制。
單下劃線僅僅是一種私有申明約定,訪問不受限制。
雙下劃線開頭(__)
在class類的內部,帶雙下劃線的類變量、實例變量、方法具有正常訪問權限。
在繼承結構中,帶雙下劃線的基類的類變量和實例變量不能被子類直接訪問。
在實例中,帶雙下劃線的類變量、實例變量、方法不能被直接訪問。但有辦法間接訪問。
雙下劃線開頭的類變量、實例變量、方法在繼承和實例中可以間接訪問
雙下劃線開頭的變量和方法替換爲單下劃線+類名+雙下劃線開頭的變量和方法
的形式,且雙下劃線開頭的變量和方法後面最多隻能以一個單下劃線結束,否則也無法訪問。
在學習過程中有什麼不懂得可以加
我的python學習交流扣扣qun,688244617
羣裏有不錯的學習教程、開發工具與電子書籍。
與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容。
class BaseCls:
def __init__(self, name, age, nick_name):
self.name = name
self.__nick_name_ = nick_name # __nick_name後面最多以一個_結束,否則通過基類名混淆的方式也無法訪問了。
self.age = age
class SubCls(BaseCls):
def __init__(self, name, age, addr, nick_name):
super().__init__(name, age, nick_name)
self.addr = addr
self.a_nick_name = self._BaseCls__nick_name_