在Python中訪問類變量和實例變量的方法
在 Python 中訪問類變量和實例變量的核心規(guī)則是:類變量可通過「類名」或「實例名」訪問(類名訪問更精準),實例變量僅能通過「實例名」訪問。下面分「訪問場景」「具體語法」「易錯點」三個維度講透,結合例子讓你快速掌握。
一、訪問類變量的兩種方式
類變量屬于類本身,因此有兩種合法訪問方式,核心區(qū)別是「是否依賴實例」。
| 訪問方式 | 語法 | 適用場景 | 優(yōu)點 |
|---|---|---|---|
| 通過類名訪問 | 類名.類變量名 | 任何場景(推薦優(yōu)先使用) | 直接訪問類變量本身,無歧義 |
| 通過實例名訪問 | 實例名.類變量名 | 已有實例,且無需修改類變量時 | 便捷,與實例變量訪問語法統(tǒng)一 |
代碼示例:訪問類變量
class Student:
# 定義類變量
school = "北京大學"
count = 0
def __init__(self, name):
# 定義實例變量
self.name = name
Student.count += 1 # 類內部通過類名訪問類變量(推薦)
# 1. 類外部通過類名訪問(最推薦,無實例也能訪問)
print(Student.school) # 輸出:北京大學
print(Student.count) # 輸出:0(還未創(chuàng)建實例)
# 2. 創(chuàng)建實例后,通過實例訪問類變量
stu1 = Student("張三")
print(stu1.school) # 輸出:北京大學(實例共享類變量)
print(stu1.count) # 輸出:1(類變量已被__init__修改)
# 3. 類內部的方法中訪問類變量
class Student:
school = "北京大學"
# 實例方法中訪問類變量
def print_school(self):
print("實例方法訪問:", Student.school) # 類名訪問(推薦)
# 也可通過self訪問(等價于self.__class__.school)
print("self訪問類變量:", self.school)
# 類方法中訪問類變量(推薦用cls)
@classmethod
def change_school(cls, new_school):
cls.school = new_school
print("類方法訪問:", cls.school) # cls等價于類名
# 靜態(tài)方法中訪問類變量(只能用類名)
@staticmethod
def static_print():
print("靜態(tài)方法訪問:", Student.school)
stu = Student("李四")
stu.print_school() # 實例方法訪問類變量
Student.change_school("清華大學") # 類方法訪問/修改類變量
Student.static_print() # 靜態(tài)方法訪問類變量二、訪問實例變量的唯一方式
實例變量屬于單個實例,因此只能通過「實例名」訪問,類名無法直接訪問(實例變量是實例的 “私有屬性”)。
| 訪問場景 | 語法 | 注意事項 |
|---|---|---|
| 類外部訪問 | 實例名.實例變量名 | 必須先創(chuàng)建實例,否則報錯 |
| 類內部方法訪問 | self.實例變量名 | self 代表當前實例,是訪問實例變量的唯一入口 |
代碼示例:訪問實例變量
class Student:
def __init__(self, name, score):
# 定義實例變量
self.name = name
self.score = score
# 類內部訪問實例變量(必須用self)
def print_info(self):
print(f"姓名:{self.name},分數(shù):{self.score}")
# 1. 類外部訪問實例變量(先創(chuàng)建實例)
stu1 = Student("張三", 90)
print(stu1.name) # 輸出:張三
print(stu1.score) # 輸出:90
# 2. 類內部通過self訪問實例變量
stu1.print_info() # 輸出:姓名:張三,分數(shù):90
# 3. 錯誤示例:類名無法訪問實例變量
# print(Student.name) # 報錯:AttributeError: type object 'Student' has no attribute 'name'
# 4. 不同實例的實例變量獨立訪問
stu2 = Student("李四", 85)
print(stu2.name) # 輸出:李四(與stu1的name互不干擾)三、關鍵易錯點與避坑指南
1. 實例訪問類變量時,若實例有同名變量會 “遮蔽” 類變量
實例訪問實例名.變量名時,Python 會優(yōu)先查找實例自身的變量,找不到才會找類變量。若實例有同名變量,會遮蔽類變量(看似 “訪問類變量”,實際訪問的是實例變量):
class Student:
school = "北京大學"
stu = Student()
stu.school = "復旦大學" # 給實例新增同名變量
print(stu.school) # 輸出:復旦大學(訪問的是實例變量,而非類變量)
print(Student.school) # 輸出:北京大學(類變量未變)2. 類內部訪問類變量:優(yōu)先用類名 /cls,而非 self
在實例方法中用self.類變量名訪問時,若實例有同名變量,會誤訪問實例變量。推薦用類名.類變量名(或self.__class__.類變量名):
class Student:
school = "北京大學"
def wrong_access(self):
self.school = "錯誤值" # 實際是給實例新增變量
print(self.school) # 輸出:錯誤值(誤訪問實例變量)
def right_access(self):
print(Student.school) # 輸出:北京大學(精準訪問類變量)
stu = Student()
stu.wrong_access()
stu.right_access()3. 不能通過類名訪問實例變量,哪怕實例已存在
實例變量是實例的屬性,類名無法感知具體實例,因此無論是否創(chuàng)建實例,類名都不能訪問實例變量:
stu = Student("張三", 90)
# print(Student.name) # 始終報錯:類無此屬性四、訪問規(guī)則總結表
| 變量類型 | 合法訪問方式 | 非法訪問方式 | 核心提醒 |
|---|---|---|---|
| 類變量 | 1. 類名。類變量名2. 實例名。類變量名 | 無(兩種方式都合法) | 實例訪問時注意同名遮蔽問題 |
| 實例變量 | 1. 實例名。實例變量名2. 類內 self. 實例變量名 | 類名。實例變量名 | 只能通過實例 /self 訪問,類名不行 |
最終總結
- 訪問類變量:優(yōu)先用
類名.類變量名(精準無歧義),實例僅在 “無同名變量” 時可臨時用實例名.類變量名; - 訪問實例變量:唯一合法方式是
實例名.實例變量名(類外)或self.實例變量名(類內),類名訪問必報錯; - 核心原則:“誰的屬性找誰要”—— 類變量找類,實例變量找實例。
以上就是在Python中訪問類變量和實例變量的方法的詳細內容,更多關于Python訪問類變量和實例變量的資料請關注腳本之家其它相關文章!
相關文章
解決Django migrate不能發(fā)現(xiàn)app.models的表問題
今天小編就為大家分享一篇解決Django migrate不能發(fā)現(xiàn)app.models的表問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
詳解利用python+opencv識別圖片中的圓形(霍夫變換)
這篇文章主要介紹了詳解利用python+opencv識別圖片中的圓形(霍夫變換),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
Python結合DeepSeek API實現(xiàn)PDF轉Word的方案
隨著信息化時代的不斷推進,PDF和Word文件格式已經(jīng)成為了日常辦公中最常見的文檔格式,在許多工作場景中,我們需要將PDF文件轉換成Word格式,本文將介紹如何結合DeepSeek API與Python,快速實現(xiàn)一個PDF轉Word的工具,需要的朋友可以參考下2025-02-02
python腳本當作Linux中的服務啟動實現(xiàn)方法
今天小編就為大家分享一篇python腳本當作Linux中的服務啟動實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python字符串str和字節(jié)數(shù)組相互轉化方法
下面小編就為大家?guī)硪黄猵ython字符串str和字節(jié)數(shù)組相互轉化方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
Python深度學習pytorch神經(jīng)網(wǎng)絡多層感知機簡潔實現(xiàn)
這篇文章主要為大家講解了Python深層學習中pytorch神經(jīng)網(wǎng)絡多層感知機的簡潔實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10

