Python:self

在Python面向對象編程中,self是一個指向類實例自身的引用參數:


?1. 本質與作用?

  • ?身份標識?:self是類實例化后對象的"身份證",代表當前實例本身,用于區分不同實例的屬性和方法?
  • ?自動傳遞?:調用實例方法時,Python會自動將實例作為第一個參數(即self)傳入,無需手動傳遞?
  • ?命名約定?:self僅為約定俗成的名稱,可替換為其他標識符(如this),但不符合代碼規范?

?2. 核心使用場景?

?(1) 訪問實例屬性?

class Person:
def __init__(self, name):
self.name = name? # 通過self綁定實例屬性

  • 未使用self的變量會成為局部變量,方法執行后即銷毀?
?(2) 調用實例方法?

class Calculator:
def add(self, a, b):
return a + b

def compute(self, x, y):
return self.add(x, y)? # 通過self調用其他方法

  • 若省略self,Python會誤判為調用全局函數?
?(3) 動態管理屬性?

class Dynamic:
def set_attr(self, key, value):
setattr(self, key, value)? # 動態添加/修改屬性


?3. 特殊注意事項?

  • ?構造方法?:__init__中的self指向新創建的實例,用于初始化屬性?
  • ?類方法?:類方法(@classmethod)使用cls替代self,表示類本身而非實例?
  • ?常見錯誤?:
    • 忘記聲明self參數導致TypeError?
    • 在靜態方法(@staticmethod)中誤用self?

?4. 設計哲學?

  • ?明確性?:通過self顯式區分實例變量與局部變量,避免命名沖突?
  • ?鏈式調用?:返回self可實現方法鏈式調用(如obj.method1().method2())?

通過合理使用self,可以構建符合Pythonic風格的面向對象代碼,實現數據封裝與行為綁定?

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

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

相關文章

【SpringMVC】SpringMVC的概念、創建及相關配置

什么是SpringMVC 概述 中文翻譯版:Servlet 棧的 Web 應用 Spring MVC是Spring Framework的一部分,是基于Java實現MVC的輕量級Web框架。 查看官方文檔:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.h…

淺談存儲過程

問題引入 面試的時候有時候會問到知不知道存儲過程,用沒用過? 是什么 存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在數據庫中,一次編譯后永久…

maven optional 功能詳解

前言 最近參與了一個項目,使用maven管理依賴.項目拆分了很多模塊.然后交個多個團隊各自開發.最后在一個項目骨架中,把各自的模塊引入進來,一起啟動. 后來隨著項目的深入.引入的jar包變多.發現 jar包太多,編譯太慢, 打包之后的war包非常大.這種情況就可以使用optional來優化什么…

Python基礎--Day04--流程控制語句

流程控制語句是計算機編程中用于控制程序執行流程的語句。它們允許根據條件來控制代碼的執行順序和邏輯,從而使程序能夠根據不同的情況做出不同的決策。流程控制實現了更復雜和靈活的編程邏輯。 順序語句 順序語句是按照編寫的順序依次執行程序中的代碼。代碼會按照…

【同濟大學】雙速率自動駕駛架構LeAD:端到端+LLM,CARLA實測93%路線完成率,性能SOTA!

近年來,隨著端到端的技術快速發展將自動駕駛帶到了一個新高度,并且取得了非常亮眼的成績。由于感知限制和極端長尾場景下訓練數據覆蓋不足,模型在高密度復雜交通場景下和不規則交通情況下的處理能力不足,導致在開放道路上大規模部…

github與git新手教程(快速訪問github)

0 序言 作為一個開發者,你必須知道github和git是什么,怎么使用。 github是一個存儲代碼等資源的遠程倉庫,一個大型項目往往需要很多人共同協作開發,而大家如何協同開發的進度與分工等要求需要有一個統一開放保存代碼的平臺。git…

Windows環境下安裝Python和PyCharm

可以只安裝PyCharm嗎?不可以!!! 開發Python應用程序需要同時安裝Python和PyCharm。Python是一種編程語言,PyCharm是一個專門為Python開發設計的集成開發環境,提供豐富的功能以簡化編碼過程。 一、前期準備…

Qt 嵌入式系統資源管理

在嵌入式系統中,資源(CPU、內存、存儲、網絡等)通常非常有限,因此高效的資源管理對 Qt 應用的穩定性和性能至關重要。本文從內存優化、CPU 調度、存儲管理到電源控制,全面解析 Qt 嵌入式系統資源管理的關鍵技術。 一、…

小杰數據結構(one day)——心若安,便是晴天;心若亂,便是陰天。

1.數據結構計算機存儲、組織數據的方式;有特定關系的數據元素集合;研究數據的邏輯結構、物理結構(真實存在)和對應的算法;新結構仍保持原結構類型;選擇更高的運行或存儲效率的數據結構。邏輯結構——面向問…

力扣面試150(44/150)

7.30 155. 最小棧 設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂…

Linux實戰:從零搭建基于LNMP+NFS+DNS的WordPress博客系統

前言 在數字化時代,擁有一個個人博客是技術愛好者展示成果、分享經驗的重要方式。本文將帶您從零開始,在Linux環境下通過兩臺服務器協作,搭建一個功能完整的WordPress博客系統。我們將整合LNMP架構、NFS文件共享和DNS域名解析服務&#xff0c…

Apache Ignite 的對等類加載(Peer Class Loading, P2P Class Loading)機制

這段內容是關于 Apache Ignite 的“對等類加載”(Peer Class Loading, P2P Class Loading)機制的詳細說明。這是 Ignite 為了簡化開發而設計的一個非常強大的功能,但同時也存在一些安全和性能上的考量。 下面我將用通俗易懂的語言 結構化解…

預過濾環境光貼圖制作教程:第四階段 - Lambert 無權重預過濾(Stage 3)

在完成高光反射的 GGX 預過濾后,我們還需要處理環境光的漫反射部分。本階段(Stage 3)將基于 Lambert 分布對環境貼圖進行無權重預過濾,生成用于漫反射計算的環境數據。與高光反射的方向性不同,漫反射是光線在粗糙表面的均勻散射,因此需要用更適合均勻分布的 Lambert 模型…

Spring與SpringBoot:從手動擋到自動擋的Java開發進化論

大家好!我是程序員良辰,今天我們來聊聊Java開發界的兩位"重量級選手":Spring 和 SpringBoot。它們之間的關系就像手動擋汽車和自動擋汽車——一個給你完全的控制權但操作復雜,一個讓你輕松上路但保留了切換手動模式的能…

1.4.Vue 的模板事件

Vue 的模板事件1. 最常見和推薦的做法。將復雜的邏輯封裝在 methods 中。<!-- ? 正確&#xff1a;調用 methods 中的方法 --> <button click"handleClick">點擊我</button>new Vue({methods: {handleClick(event) {// 這里可以寫任意語句if (this…

SQLite 子查詢詳解

SQLite 子查詢詳解 引言 SQLite 是一種輕量級的數據庫&#xff0c;以其簡單、易用和跨平臺而著稱。在數據庫查詢中&#xff0c;子查詢是一個非常重要的概念&#xff0c;它允許我們在查詢中使用查詢結果。本文將詳細講解 SQLite 中的子查詢&#xff0c;包括其定義、用法以及在實…

可以組成網絡的服務器 - 華為OD統一考試(JavaScript 題解)

題目描述 在一個機房中,服務器的位置標識在n*m的整數矩陣網格中,1表示單元格上有服務器,0表示沒有。如果兩臺服務器位于同一行或者同一列中緊鄰的位置,則認為它們之間可以組成一個局域網,請你統計機房中最大的局域網包含的服務器個數。 輸入描述 第一行輸入兩個正整數,…

redis,MongoDB等未授權訪問靶場復現

redis未授權訪問在docker中啟動vulhub對應的靶場目錄&#xff1a;cd /vulhub-master/redis/4-unacc在kali上安裝redis程序進行服務連接安裝redis apt-get install redis redis鏈接 redis-cli -h IP -p 端口輸入info可以查看信息接下來我們使用redis-rogue-server來獲取命令執行…

設計模式:代理模式 Proxy

目錄問題解決方案結構代碼代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在將請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f; 舉個例子&#xff1a; 有這樣一…

Linux零基礎Shell教學全集(可用于日常查詢語句,目錄清晰,內容詳細)(自學尚硅谷B站shell課程后的萬字學習筆記,附課程鏈接)

此文章為學習了 尚硅谷B站課程 后的學習筆記 【尚硅谷】Shell腳本從入門到實戰_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1hW41167NW/?spm_id_from333.337.search-card.all.click&vd_source68e0bbe20c8b1102b59ced40f67db628注意&#xff1a;需要先學Linux基礎…