類的property屬性

??Python 中的 @property 特性詳解??

@property 是 Python 中用于??將方法轉換為屬性??的裝飾器,它允許開發者以訪問屬性的方式調用方法,同時可以添加邏輯控制(如數據校驗、計算屬性等)。以下是其核心用法和優勢:


??一、@property 的基本用法??

??1. 將方法變為只讀屬性??

class Circle:def __init__(self, radius):self.radius = radius@propertydef area(self):  # 通過方法計算面積,但調用時像屬性return 3.14 * self.radius ** 2c = Circle(5)
print(c.area)  # 78.5(無需括號,像訪問屬性)
# c.area = 100  # 報錯!area是只讀屬性

??2. 添加 setter 和 deleter??

通過 @屬性名.setter@屬性名.deleter 控制屬性的寫入和刪除:

class Temperature:def __init__(self, celsius):self._celsius = celsius  # 內部存儲攝氏度@propertydef celsius(self):  # 讀操作return self._celsius@celsius.setterdef celsius(self, value):  # 寫操作(可校驗)if value < -273.15:raise ValueError("溫度不能低于絕對零度")self._celsius = value@propertydef fahrenheit(self):  # 計算屬性(華氏度)return self._celsius * 9/5 + 32temp = Temperature(25)
print(temp.fahrenheit)  # 77.0(自動計算)
temp.celsius = 30       # 通過 setter 修改
# temp.celsius = -300    # 觸發 ValueError

??二、@property 的核心優勢??

??1. 數據校驗??

在 setter 中限制屬性值的合法性:

class User:def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, value):if not isinstance(value, str):raise TypeError("姓名必須是字符串")self._name = valueuser = User("Alice")
user.name = "Bob"  # 合法
# user.name = 123   # 報錯:TypeError

??2. 計算屬性??

動態生成屬性值(如面積、平均值):

class Rectangle:def __init__(self, width, height):self.width = widthself.height = height@propertydef area(self):return self.width * self.heightrect = Rectangle(3, 4)
print(rect.area)  # 12(自動計算)

??3. 兼容性??

在不改變外部接口的情況下修改內部實現:

class OldClass:def __init__(self, value):self.value = value  # 直接暴露屬性# 改為使用 @property 后,外部代碼無需修改
class NewClass:def __init__(self, value):self._value = value@propertydef value(self):return self._value * 2  # 內部邏輯變化

??三、@property 與普通方法的區別??

??特性????@property????普通方法??
??調用方式??obj.property(無括號)obj.method()(需括號)
??功能??像屬性一樣訪問,但可包含邏輯顯式執行操作
??可寫性??需配合 setter 才能修改可直接修改返回值

??四、實際應用場景??

??1. 數據模型(如 Django ORM)??

class Product:def __init__(self, price):self._price = price@propertydef price_with_tax(self):return self._price * 1.1  # 自動計算含稅價格

??2. API 設計??

隱藏內部字段名,提供統一接口:

class APIResponse:def __init__(self, raw_data):self._raw_data = raw_data@propertydef data(self):return self._raw_data["data"]  # 封裝原始數據解析

??3. 兼容舊代碼??

逐步替換直接暴露的屬性:

class LegacyClass:def __init__(self, x):self.x = x  # 舊代碼直接訪問 x# 新代碼改用 @property
class ModernClass:def __init__(self, x):self._x = x@propertydef x(self):return self._x ** 2  # 新增邏輯

??五、總結??

??要點????說明??
??基本功能??將方法偽裝成屬性,保持調用簡潔性
??核心方法??@property(讀)、@attr.setter(寫)、@attr.deleter(刪)
??優勢??數據校驗、計算屬性、接口兼容性
??適用場景??需要控制屬性訪問或動態計算的場景

??核心價值??:
??以屬性的語法實現方法的功能??,兼顧簡潔性與靈活性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96579.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Redis#9】其他數據結構

引言 Redis 除了我們最常用的 String、Hash、List、Set、ZSet&#xff08;Sorted Set&#xff09; 這五種基本數據結構外&#xff0c;還提供了很多高級或特殊用途的數據結構/類型 &#xff0c;它們可以滿足更復雜的業務需求。 ? Redis 的“五大基本數據結構”回顧類型特點Stri…

AutoGen——自定義Agent

目錄引子自定義 AgentCountDownAgentArithmeticAgent在自定義 Agent 中使用自定義模型客戶端讓自定義 Agent 聲明式化Selector Group Chat示例&#xff1a;網頁搜索 / 數據分析代理&#xff08;Agents&#xff09;Workflow終止條件&#xff08;Termination Conditions&#xff…

【重定向和轉發的核心理解】

重定向和轉發 不廢話&#xff1a; “轉發” 的核心定義&#xff1a; 服務端內部主導跳轉、客戶端無感知&#xff08;僅 1 次請求&#xff09;、瀏覽器 URL 不改變&#xff0c;與傳統 Web 開發中 “轉發” 的本質邏輯完全一致&#xff0c;只是實現載體&#xff08;Nginx 路由層 …

生成對抗網絡詳解與實現

生成對抗網絡詳解與實現0. 前言1. GAN 原理2. GAN 架構3. 損失函數3.1 判別器損失3.2 生成器損失3.4 VANILLA GAN4. GAN 訓練步驟0. 前言 生成對抗網絡 (Generative Adversarial Network, GAN) 是圖像和視頻生成中的主要方法之一。在本節中&#xff0c;我們將了解 GAN 的架構、…

FPGA硬件開發-XPE工具的使用

目錄 XPE 工具概述? XPE 使用步驟詳解? 1. 工具獲取與初始化? 2. 器件選擇與配置? 3. 電源電壓設置? 4. 資源使用量配置? 5. 時鐘與開關活動配置? 6. 功耗計算與報告生成? 報告解讀與電源設計優化? 常見問題與最佳實踐? 與實際功耗的差異處理? 工具版本…

CentOS 7.9 RAID 10 實驗報告

文章目錄CentOS 7.9 RAID 10 實驗報告一、實驗概述1.1 實驗目的1.2 實驗環境1.3 實驗拓撲二、實驗準備2.1 磁盤準備2.2 安裝必要軟件三、RAID 10陣列創建3.1 創建RAID 10陣列3.2 創建文件系統并掛載3.3 保存RAID配置四、性能基準測試4.1 初始性能測試4.2 創建測試數據集五、故障…

機器人逆運動學進階:李代數、矩陣指數與旋轉流形計算

做機器人逆運動學&#xff08;IK&#xff09;的時候&#xff0c;你遲早會遇到矩陣指數和對數這些東西。為什么呢&#xff1f;因為計算三維旋轉的誤差&#xff0c;不能簡單地用歐氏距離那一套&#xff0c;那只對位置有效。旋轉得用另一套方法——你需要算兩個旋轉矩陣之間的差異…

計算機視覺(opencv)實戰十八——圖像透視轉換

圖像透視變換詳解與實戰在圖像處理中&#xff0c;透視變換&#xff08;Perspective Transform&#xff09; 是一種常見的幾何變換&#xff0c;用來將圖像中某個四邊形區域拉伸或壓縮&#xff0c;映射到一個矩形區域。常見應用場景包括&#xff1a;糾正拍照時的傾斜&#xff08;…

【飛書多維表格插件】

coze中添加飛書多維表格記錄插件 添加單條記錄 [{"fields":{"任務詳情":"選項1","是否完成":"未完成"}}]添加多條記錄 [{"fields":{"任務詳情":"選項1","是否完成":"已完…

Java基礎 9.14

1.Collection接口遍歷對象方式2-for循環增強增強for循環&#xff0c;可以代替iterator選代器&#xff0c;特點&#xff1a;增強for就是簡化版的iterator本質一樣 只能用于遍歷集合或數組package com.logic.collection_;import java.util.ArrayList; import java.util.Collectio…

數據結構(C語言篇):(十三)堆的應用

目錄 前言 一、堆排序 1.1 版本一&#xff1a;基于已有數組建堆、取棧頂元素完成排序 1.1.1 實現邏輯 1.1.2 底層原理 1.1.3 應用示例 1.1.4 執行流程 1.2 版本二&#xff1a;原地排序 —— 標準堆排序 1.2.1 實現邏輯 1.2.2 底層原理 1.2.3 時間復雜度計算…

4步OpenCV-----掃秒身份證號

這段代碼用 OpenCV 做了一份“數字模板字典”&#xff0c;然后在銀行卡/身份證照片里自動找到身份證號那一行&#xff0c;把每個數字切出來跟模板比對&#xff0c;最終輸出并高亮顯示出完整的身份證號碼&#xff0c;下面是代碼解釋&#xff1a;模塊 1 工具箱&#xff08;通用函…

馮諾依曼體系:現代計算機的基石與未來展望

馮諾依曼體系&#xff1a;現代計算機的基石與未來展望 引人入勝的開篇 當你用手機刷視頻、用電腦辦公時&#xff0c;是否想過這些設備背后共享的底層邏輯&#xff1f;從指尖輕滑切換APP&#xff0c;到電腦秒開文檔&#xff0c;這種「無縫銜接」的體驗&#xff0c;其實藏著一個改…

前端基礎 —— C / JavaScript基礎語法

以下是對《3.JavaScript(基礎語法).pdf》的內容大綱總結&#xff1a;---&#x1f4d8; 一、JavaScript 簡介 - 定義&#xff1a;腳本語言&#xff0c;最初用于表單驗證&#xff0c;現為通用編程語言。 - 應用&#xff1a;網頁開發、游戲、服務器&#xff08;Node.js&#xff09…

springboot 二手物品交易系統設計與實現

springboot 二手物品交易系統設計與實現 目錄 【SpringBoot二手交易系統全解析】從0到1搭建你的專屬平臺&#xff01; &#x1f50d; 需求確認&#xff1a;溝通對接 &#x1f5e3; &#x1f4ca; 系統功能結構&#xff1a;附思維導圖 ☆開發技術&#xff1a; &#x1f6e…

【Android】可折疊式標題欄

在 Android 應用開發中&#xff0c;精美的用戶界面可以顯著提升應用品質和用戶體驗。Material Design 組件中的 CollapsingToolbarLayout 能夠為應用添加動態、流暢的折疊效果&#xff0c;讓標題欄不再是靜態的元素。本文將深入探討如何使用 CollapsingToolbarLayout 創建令人驚…

Debian13下使用 Vim + Vimspector + ST-LINK v2.1 調試 STM32F103 指南

1. 硬件準備與連接 1.1 所需硬件 STM32F103C8T6 最小系統板ST-LINK v2.1 調試器連接線&#xff08;杜邦線&#xff09; 1.2 硬件連接 ST-LINK v2.1 ? STM32F103C8T6 連接方式&#xff1a;ST-LINK v2.1 引腳STM32F103C8T6 引腳功能說明SWDIOPA13數據線SWCLKPA14時鐘線GNDGND共地…

第21課:成本優化與資源管理

第21課:成本優化與資源管理 課程目標 掌握計算資源優化 學習成本控制策略 了解資源調度算法 實踐實現成本優化系統 課程內容 21.1 成本分析框架 成本分析系統 class CostAnalysisFramework {constructor(config) {this.config

SAP HANA Scale-out 04:CalculationView優化

CV執行過程計算視圖激活時&#xff0c;生成Stored ModelSELECT查詢時&#xff1a;首先將Stored Model實例化為runtime Model 計算引擎執行優化&#xff0c;將runtime Model轉換為Optimized Runtime ModelOptimized Runtime Model通過SQL Optimizer進行優化計算引擎優化特性說明…

鴻蒙審核問題——Scroll中嵌套了List/Grid時滑動問題

文章目錄背景原因解決辦法1、借鑒Flutter中的解決方式&#xff0c;如下圖2、鴻蒙Next中對應的解決方式&#xff0c;如下圖3、官方文檔回訪背景 來源一次審核被拒的情況。也是出于粗心導致的。之前在flutter項目中也是遇到過這種問題的。其實就是滾動視圖內嵌滾動視圖造成的&am…