Python3 之 類屬性與實例屬性

来源:https://www.cnblogs.com/gengyufei/archive/2019/08/17/11370026.html
-Advertisement-
Play Games

1、類屬性與實例屬性 類屬性就相當與全局變數,實例對象共有的屬性,實例對象的屬性為實例對象自己私有。 類屬性就是類對象(Tool)所擁有的屬性,它被所有類對象的實例對象(實例方法)所共有,在記憶體中只存在一個副本,這個和C++中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類對象和實例對象 ...


1、類屬性與實例屬性

  類屬性就相當與全局變數,實例對象共有的屬性實例對象的屬性為實例對象自己私有

  類屬性就是類對象(Tool)所擁有的屬性,它被所有類對象的實例對象(實例方法)所共有,在記憶體中只存在一個副本,這個和C++中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類對象和實例對象訪問。

2、實例:類屬性

 1 class People(object):
 2     name = 'Jack'  #類屬性(公有)
 3     __age = 12     #類屬性(私有)
 4 
 5 p = People()    #創建實例對象
 6 
 7 print(p.name)           #通過實例對象,列印類屬性:name
 8 print(People.name)      #通過類對象,列印類屬性:name
 9 print(p.__age)            #錯誤,不能在類外通過實例對象訪問私有的類屬性
10 print(People.__age)        #錯誤,不能在類外通過類對象訪問私有的類屬性
11 
12 #結果如下:
13 # Jack
14 # Jack
15 # AttributeError: 'People' object has no attribute '__age'
16 # AttributeError: type object 'People' has no attribute '__age'

3、實例:實例屬性(對象屬性)

 1 class People(object):
 2     address = '山東'  # 類屬性
 3     def __init__(self):
 4         self.name = 'xiaowang'  # 實例屬性
 5         self.age = 20  # 實例屬性
 6 
 7 p = People()    #創建實例對象
 8 p.age = 12  # 通過實例對象調用實例屬性,更改實例屬性值
 9 print(p.address)  # 通過實例對象調用類屬性,並列印
10 print(p.name)  # 通過實例對象調用實例屬性,並列印
11 print(p.age)  # 通過實例對象調用實例屬性,並列印
12 
13 #結果:
14 # 山東
15 # xiaowang
16 # 12
17 
18 print(People.address)  # 通過類對象調用類屬性,並列印
19 print(People.name)  # 錯誤(程式會報錯),通過類對象調用實例屬性,並列印
20 print(People.age)  # 錯誤(程式會報錯),通過類對象調用實例屬性,並列印
21 
22 #結果:
23 # 山東
24 # AttributeError: type object 'People' has no attribute 'name'
25 # AttributeError: type object 'People' has no attribute 'age'

4、通過實例(對象)去修改類屬性

 1 class People(object):
 2     country = 'china'  # 類屬性
 3 
 4 print(People.country)   #china
 5 p = People()
 6 print(p.country)    #china
 7 p.country = 'japan' 
 8 print(p.country)  # 實例屬性會屏蔽掉同名的類屬性:japan
 9 print(People.country)   #china
10 del p.country  # 刪除實例屬性
11 print(p.country)    #實例屬性被刪除後,再調用同名稱的屬性,會調用類屬性:china

小結:

  如果需要在類外修改類屬性必須通過類對象去引用然後進行修改。如果通過實例對象去引用,會產生一個同名的實例屬性,這種方式修改的是實例屬性,不會影響到類屬性,並且之後如果通過實例對象去引用該名稱的屬性,實例屬性會強制屏蔽掉類屬性,即引用的是實例屬性,除非刪除了該實例屬性

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第十一節 一,函數名的第一類對象 函數名當作值,賦值給變數 print(函數名) 查看看書的記憶體地址 print(函數名) 查看看書的記憶體地址 函數名可以當作容器中的元素 函數名可以當作函數的參數 函數名可以當作函數的返回值 二,f-strings字元串格式化 f"{變數名}" F"{變數名}" f ...
  • 一、繼承的概念及使用方法 在Python中一個類如果想使用前面一個類所有的方法和屬性就需要使用繼承 繼承的定義 def Class_Child(Class_parent) 這樣就可以在子類中使用父類中定義的方法和屬性,但是,如果子類中定義的屬性和方法和父類中定義的重覆了,則將直接使用子類本身定義的方 ...
  • 一、Config簡介 在微服務系統中,服務較多,相同的配置:如資料庫信息、緩存、參數等,會出現在不同的服務上,如果一個配置發生變化,需要修改很多的服務配置。spring cloud提供配置中心,來解決這個場景問題。 系統中的通用配置存儲在相同的地址:GitHub,Gitee,本地配置服務等,然後配置 ...
  • # os模塊是與操作系統交互的一個介面 import os print(os.getcwd()) # 獲取當前工作目錄,當前python文件的目錄路徑 # os.chdir('02random模塊.py') print(os.curdir)# 返回當前目錄: ('.') print(os.pardi... ...
  • 本文主要以一個簡單的小例子,簡述SpringMVC開發中,Json的相關應用,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 自動掃雷一般分為兩種,一種是讀取記憶體數據,而另一種是通過分析圖片獲得數據,並通過模擬滑鼠操作,這裡我用的是第二種方式。 一、準備工作 1.掃雷游戲 我是win10,沒有預設的掃雷,所以去掃雷網下載 http://www.saolei.net/BBS/ 2.python 3 我的版本是 python ...
  • 由於執行的xss攻擊請求他多了,初步估計要執行83次,而且還要執行3篇,如果手工一個一個去執行,說出去,我還配叫自動化大師嗎; 有鑒於此,邊打算自己編寫一個腳本進行批量執行; 而短腳本的編寫,非shell莫屬,想到做到; 首先附上xss跨站攻擊的請求報文: 看到沒有如果一個一個執行,我的天,這要猴年 ...
  • python中如何調用函數交換兩個變數的值 所有代碼來在python3.7.1版本實現 以下實例通過用戶輸入兩個變數,並相互交換: 方法一: def swap(a,b): # 創建臨時變數,並交換 temp = a a = b b = temp print(a,b) 以上實例中,我們創建了臨時變數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...