日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 的类其实是一个特殊的对象

發布時間:2025/3/20 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 的类其实是一个特殊的对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 中的類是一個特殊的對象。

Python 中一切皆對象:

  • class AAA:定義的類屬于類對象。
  • obj1 = AAA(): 屬于實例對象。

在程序運行時,類同樣會被加載到內存,類是一個特殊的對象——類對象。

類對象在內存中只有一份,使用一個類可以創建出很多個對象實例。

除了封裝實例的屬性和方法外,類對象還可以擁有自己的屬性和方法。

通過 ‘類名.’ 的方式可以訪問類的屬性或者調用類的方法。

一、類屬性

類屬性就是給類對象中定義的屬性,通常用來記錄與這個類相關的特征,類屬性不會用于記錄具體對象的特征。

類屬性的特點是,所有類的實例化對象都同時共享類屬性,也就是說,類屬性在所有實例化對象中是作為公用資源存在的。

示例:

class Tool(object):# 使用賦值語句定義類屬性,記錄所有工具對象的數量count = 0def __init__(self, name):self.name = name# 讓類屬性的值+1Tool.count += 1# 1. 創建工具對象 tool1 = Tool("斧頭") tool2 = Tool("榔頭") tool3 = Tool("水桶")# 2. 輸出工具對象的總數 print(Tool.count) # 3

屬性的獲取機制

在 Python 中屬性的獲取存在一個向上查找機制。

在python中,通過 tool1.count 的方式是怎么獲取屬性的值的?

首先,在 Tool 類中定義了類屬性 count 和 實例屬性 name,我們要訪問 count 屬性,是通過 Tool.count 的方式進行訪問。但是在 Python中,除了可以用類名的方式來訪問類屬性,還可以使用對象變量的方式進行訪問。

假設我們實例化了 Tool 類,得到了對象 tool1,在調用 tool1.count 的時候,首先是查找的對象 tool1 中的對象,如果沒有找到,那么解釋器就會向上尋找類中的 count 屬性,如果找到就輸出,如果沒有找到就報錯。

這就是 python 中的屬性向上查找機制。

因此,要訪問類屬性有兩種方式:

  • 類名.類屬性
  • 對象.類屬性 (不推薦)

注意:如果使用"對象.類屬性 = 值"的賦值語句,只會給對象添加一個屬性,而不會影響到類屬性的值。

示例:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class Tool(object):# 使用賦值語句定義類屬性,記錄所有工具對象的數量count = 0def __init__(self, name):self.name = name# 讓類屬性的值+1Tool.count += 1# 1. 創建工具對象 tool1 = Tool("斧頭") tool2 = Tool("榔頭") tool3 = Tool("水桶")# 2. 輸出工具對象的總數 tool3.count = 99 print(tool3.count) # 99 print(Tool.count) # 3

二、類方法

類方法就是針對類對象定義的方法,在類方法內部可以直接訪問類屬性或者調用其他的類方法。

Python 類方法和實例方法相似,它最少也要包含一個參數,只不過類方法中通常將其命名為 cls,

Python 會自動將類本身綁定給 cls 參數(注意,綁定的不是類對象)。

語法如下:

@classmethod def 類方法名(cls):pass

類方法需要用修飾器 @classmethod 來標識,告訴解釋器這是一個類方法。

類方法的第一個參數應該是 cls,由哪一個類調用的方法,方法內的 cls 就是哪一個類的引用,這個參數和實例方法的第一個參數是 self 類似。

和 self 一樣,cls 參數的命名也不是規定的(可以隨意命名),只是 Python 程序員約定俗稱的習慣而已。

通過 ‘類名.’ 的方式調用類方法,調用方法時,不需要傳遞 cls 參數。

在方法內部,可以通過 ‘cls.’ 訪問類的屬性,也可以通過 ‘cls.’ 調用其他的類方法。

示例:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' @classmethod def show_tool_count(cls):"""顯示工具對象的總數"""print("工具對象的總數 %d" % cls.count)

三、靜態方法

在開發時,如果需要在類中封裝一個方法,這個方法既不需要訪問實例屬性或者調用實例方法,也不需要訪問類屬性或者調用類方法,這個時候,可以把這個方法封裝成一個靜態方法。

靜態方法,其實就是我們學過的函數,和函數唯一的區別是,靜態方法定義在類這個空間(類命名空間)中,而函數則定義在程序所在的空間(全局命名空間)中。

靜態方法:由類調用;無默認參數。

語法如下:

@staticmethod def 靜態方法名():pass

靜態方法需要用修飾器 @staticmethod 來標識,告訴解釋器這是一個靜態方法。通過 ‘類名.’ 的方式調用靜態方法。

靜態方法沒有類似 self、cls 這樣的特殊參數,因此 Python 解釋器不會對它包含的參數做任何類或對象的綁定。也正因為如此,類的靜態方法中無法調用任何類屬性和類方法。

示例:

class Dog(object):@staticmethoddef run():# 不訪問實例屬性/類屬性print("小狗要跑...")# 通過類名.調用靜態方法 - 不需要創建對象 Dog.run()

總結

以上是生活随笔為你收集整理的Python 的类其实是一个特殊的对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。