最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

    def __get_score(self):  # 私有方法, 不能被直接訪問,但是可以通過雙下劃線實(shí)現(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

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

1.2 類專有的方法

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

當(dāng)然有些時(shí)候我們需要獲取類的相關(guān)信息,我們可以使用如下的方法:

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

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

傳統(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)

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

三、總結(jié)

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

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

相關(guān)文章

  • pandas 強(qiáng)制類型轉(zhuǎn)換 df.astype實(shí)例

    pandas 強(qiáng)制類型轉(zhuǎn)換 df.astype實(shí)例

    這篇文章主要介紹了pandas 強(qiáng)制類型轉(zhuǎn)換 df.astype實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫)

    Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫)

    本文基于channels庫Django實(shí)現(xiàn)WebSocket在線聊天室功能,包括安裝及創(chuàng)建django項(xiàng)目的全過程,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Playwright中Assertions斷言的方法實(shí)現(xiàn)

    Playwright中Assertions斷言的方法實(shí)現(xiàn)

    在編寫測試時(shí),我們使用assert語句來斷言一段條件并以此為基礎(chǔ)條件,我們要么通過測試,要么不通過測試,Playwright給我們提供了另一個(gè)API,可以以一種更易讀的方式用來執(zhí)行相同的判斷
    2026-01-01
  • Python繪制條形熱圖的示例代碼

    Python繪制條形熱圖的示例代碼

    條形熱圖(Strip Heatmap) 就像一位魔法設(shè)計(jì)師,用色彩編碼和有序排列讓復(fù)雜數(shù)據(jù)變得清爽直觀,本文我們就來學(xué)習(xí)一下如何使用Python繪制簡單的條形熱圖吧
    2025-07-07
  • Python繪制TSP、VRP問題求解結(jié)果圖全過程

    Python繪制TSP、VRP問題求解結(jié)果圖全過程

    本文介紹用Python繪制TSP和VRP問題的靜態(tài)與動(dòng)態(tài)結(jié)果圖,靜態(tài)圖展示路徑,動(dòng)態(tài)圖通過matplotlib.animation模塊實(shí)現(xiàn)動(dòng)畫效果,保存為GIF需安裝PIL庫支持
    2025-09-09
  • Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法

    Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法

    這篇文章主要介紹了Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法,結(jié)合實(shí)例形式分析了基于RSA秘鑰遠(yuǎn)程登陸及文件操作的相關(guān)技巧,需要的朋友可以參考下
    2016-09-09
  • python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖

    python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖

    不論是數(shù)據(jù)挖掘還是數(shù)據(jù)建模,都免不了數(shù)據(jù)可視化的問題,對(duì)于Python來說,Matplotlib是最著名的繪圖庫,它主要用于二維繪圖,這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 使用Python在PDF中設(shè)置圖片透明度的操作方法

    使用Python在PDF中設(shè)置圖片透明度的操作方法

    在 PDF 文檔編輯中,適當(dāng)?shù)卣{(diào)整圖片的透明度,可以幫助實(shí)現(xiàn)更平衡的版面效果,使內(nèi)容層次更清晰、視覺更協(xié)調(diào),助 Free Spire.PDF for Python,我們可以通過簡單的 Python 代碼靈活設(shè)置圖片的透明度,而無需借助復(fù)雜的圖像編輯軟件,需要的朋友可以參考下
    2025-11-11
  • tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法

    tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法

    本篇文章主要介紹了tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Flask Paginate實(shí)現(xiàn)表格分頁的使用示例

    Flask Paginate實(shí)現(xiàn)表格分頁的使用示例

    flask_paginate是Flask框架的一個(gè)分頁擴(kuò)展,用于處理分頁相關(guān)的功能,本文就來介紹一下Flask Paginate實(shí)現(xiàn)表格分頁的使用示例,感興趣的可以了解一下
    2023-11-11

最新評(píng)論

绿春县| 盐亭县| 林芝县| 霍邱县| 砀山县| 阜南县| 五台县| 五家渠市| 济宁市| 谢通门县| 竹溪县| 成武县| 隆回县| 揭阳市| 新平| 得荣县| 长阳| 大余县| 甘南县| 临夏县| 南宁市| 龙州县| 都匀市| 吴桥县| 诏安县| 柘城县| 个旧市| 黑山县| 贺州市| 太白县| 察哈| 勃利县| 商河县| 咸丰县| 墨江| 扎鲁特旗| 永修县| 贺州市| 广饶县| 漾濞| 庆云县|