亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文帶你搞懂Python類的訪問控制

 更新時間:2025年05月27日 08:23:21   作者:燭陰  
這篇文章主要為大家詳細介紹了Python中類的訪問控制的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解一下

一、訪問控制的本質:數(shù)據(jù)安全與接口設計

1.1 類屬性和方法的訪問控制

一般情況下,我們會使用 __private_attrs 兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrsPython作為動態(tài)語言,打破了傳統(tǒng)OOP語言對訪問控制的剛性限制。同理類方法的訪問控制與屬性一樣。

class Student:
    def __init__(self, score, name):
        self.name = name  # 公有屬性, 可以直接被訪問
        self.__score = score  # 私有屬性, 不能被直接訪問,但是可以通過雙下劃線實現(xiàn)Name Mangling訪問

    def get_score(self):  # 公有方法, 可以直接被訪問
        return self.__score

    def __get_score(self):  # 私有方法, 不能被直接訪問,但是可以通過雙下劃線實現(xiàn)Name Mangling訪問
        return self.__score
        
s = Student(100, 'Bob')
print(s.name)  # 訪問公有屬性
print(s._Student__score)  # 訪問私有屬性,Name Mangling
print(s.get_score())  # 訪問公有方法
print(s._Student__get_score())  # 訪問私有方法,Name Mangling

這段代碼看似實現(xiàn)了信息隱藏,實際通過_Student__score仍可訪問。這種"約定優(yōu)于限制"的設計哲學,體現(xiàn)了Pythonic的核心思想。

1.2 類專有的方法

方法說明
__init__構造函數(shù),在生成對象時調用
__del__析構函數(shù),釋放對象時使用
__repr__打印,轉換
__setitem__按照索引賦值
__getitem__按照索引獲取值
__len__獲得長度
__cmp__比較運算
__call__函數(shù)調用
__add__加運算
__sub__減運算
__mul__乘運算
__div__除運算
__mod__求余運算
__pow__乘方

當然有些時候我們需要獲取類的相關信息,我們可以使用如下的方法:

  • type(obj):來獲取對象的相應類型;
  • isinstance(obj, type):判斷對象是否為指定的 type 類型的實例;
  • hasattr(obj, attr):判斷對象是否具有指定屬性/方法;
  • getattr(obj, attr[, default]) 獲取屬性/方法的值, 要是沒有對應的屬性則返回 default 值(前提是設置了 default),否則會拋出 AttributeError 異常;
  • setattr(obj, attr, value):設定該屬性/方法的值,類似于 obj.attr=value;
  • dir(obj):可以獲取相應對象的所有屬性和方法名的列表

二、訪問器模式的現(xiàn)代寫法(@property進階)

傳統(tǒng)getter/setter模式:

class TemperatureSensor:
    def get_temperature(self):
        return self._raw_data * 0.8 - 5
    
    def set_temperature(self, value):
        if value < -273.15:
            raise ValueError("Absolute zero violation")
        self._raw_data = (value + 5)/0.8

sensor = TemperatureSensor()
sensor.set_temperature(20)
print(sensor.get_temperature())

現(xiàn)代Python推薦使用更優(yōu)雅的@property裝飾器:

class TemperatureSensor:
    @property
    def temperature(self):
        return self._raw_data * 0.8 - 5
    
    @temperature.setter
    def temperature(self, value):
        if value < -273.15:
            raise ValueError("Invalid temperature")
        self._raw_data = (value + 5)/0.8


sensor = TemperatureSensor()
sensor.temperature = 25
print(sensor.temperature)

實戰(zhàn)技巧:在setter中可以加入類型檢查、范圍驗證、歷史記錄等增強功能

三、總結

控制級別定義方式可訪問范圍使用場景
公有成員name任意位置對外暴露的完整接口
保護成員_name (單下劃線)本類及子類內部實現(xiàn)但允許繼承擴展
私有成員__name本類內部絕對私有防止外部干擾

到此這篇關于一文帶你搞懂Python類的訪問控制的文章就介紹到這了,更多相關Python類訪問控制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python輪詢機制控制led實例

    python輪詢機制控制led實例

    這篇文章主要介紹了python輪詢機制控制led實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • PyCharm的設置方法和第一個Python程序的建立

    PyCharm的設置方法和第一個Python程序的建立

    今天小編就為大家分享一篇PyCharm的設置方法和第一個Python程序的建立,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python MySQL查詢限制方式詳解

    Python MySQL查詢限制方式詳解

    MySQL是一款廣泛使用的關系型數(shù)據(jù)庫,而Python是一門流行的編程語言,在進行數(shù)據(jù)庫操作時,二者的結合可以幫助我們更加高效地進行操作和管理,這篇文章主要介紹了Python MySQL查詢限制,需要的朋友可以參考下
    2023-11-11
  • Python字符串檢索方式

    Python字符串檢索方式

    文章介紹了Python中字符串查找的六種方法:count()、find()、index()、rindex()、startswith()和endswith(),并詳細解釋了每個方法的語法和運行結果
    2024-11-11
  • python如何利用re模塊正則表達式匹配ip地址

    python如何利用re模塊正則表達式匹配ip地址

    這篇文章主要介紹了python如何利用re模塊正則表達式匹配ip地址問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • PyTorch?Tensor創(chuàng)建實現(xiàn)

    PyTorch?Tensor創(chuàng)建實現(xiàn)

    本文主要介紹了PyTorch?Tensor創(chuàng)建實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Python中不同類之間調用方法的四種方式小結

    Python中不同類之間調用方法的四種方式小結

    類是一種面向對象的編程范式,它允許我們將數(shù)據(jù)和功能封裝在一個實體中,本文主要介紹了Python中不同類之間調用方法的四種方式小結,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • python中用cantools和can工具包解析blf文件的方法

    python中用cantools和can工具包解析blf文件的方法

    這篇文章主要給大家介紹了關于python中用cantools和can工具包解析blf文件的相關資料,blf數(shù)據(jù)不像mf4那樣自帶信號數(shù)據(jù)庫,因為它是記日志用的,一般情況下要盡可能的小,需要的朋友可以參考下
    2023-09-09
  • python tqdm 實現(xiàn)滾動條不上下滾動代碼(保持一行內滾動)

    python tqdm 實現(xiàn)滾動條不上下滾動代碼(保持一行內滾動)

    這篇文章主要介紹了python tqdm 實現(xiàn)滾動條不上下滾動代碼(保持一行內滾動),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • django創(chuàng)建最簡單HTML頁面跳轉方法

    django創(chuàng)建最簡單HTML頁面跳轉方法

    今天小編就為大家分享一篇django創(chuàng)建最簡單HTML頁面跳轉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論