python中單下劃線(_)和雙下劃線(__)的特殊用法

單下劃線開頭()
在模塊中使用單下劃線開頭
模塊中使用單下劃線(
)開頭定義函數、全局變量和類不能被模塊外部以: 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_ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章