Python 的类其实是一个特殊的对象
Python 中的類是一個特殊的對象。
Python 中一切皆對象:
- class AAA:定義的類屬于類對象。
- obj1 = AAA(): 屬于實例對象。
在程序運行時,類同樣會被加載到內存,類是一個特殊的對象——類對象。
類對象在內存中只有一份,使用一個類可以創建出很多個對象實例。
除了封裝實例的屬性和方法外,類對象還可以擁有自己的屬性和方法。
通過 ‘類名.’ 的方式可以訪問類的屬性或者調用類的方法。
一、類屬性
類屬性就是給類對象中定義的屬性,通常用來記錄與這個類相關的特征,類屬性不會用于記錄具體對象的特征。
類屬性的特點是,所有類的實例化對象都同時共享類屬性,也就是說,類屬性在所有實例化對象中是作為公用資源存在的。
示例:
屬性的獲取機制
在 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.’ 調用其他的類方法。
示例:
三、靜態方法
在開發時,如果需要在類中封裝一個方法,這個方法既不需要訪問實例屬性或者調用實例方法,也不需要訪問類屬性或者調用類方法,這個時候,可以把這個方法封裝成一個靜態方法。
靜態方法,其實就是我們學過的函數,和函數唯一的區別是,靜態方法定義在類這個空間(類命名空間)中,而函數則定義在程序所在的空間(全局命名空間)中。
靜態方法:由類調用;無默認參數。
語法如下:
@staticmethod def 靜態方法名():pass靜態方法需要用修飾器 @staticmethod 來標識,告訴解釋器這是一個靜態方法。通過 ‘類名.’ 的方式調用靜態方法。
靜態方法沒有類似 self、cls 這樣的特殊參數,因此 Python 解釋器不會對它包含的參數做任何類或對象的綁定。也正因為如此,類的靜態方法中無法調用任何類屬性和類方法。
示例:
class Dog(object):@staticmethoddef run():# 不訪問實例屬性/類屬性print("小狗要跑...")# 通過類名.調用靜態方法 - 不需要創建對象 Dog.run()總結
以上是生活随笔為你收集整理的Python 的类其实是一个特殊的对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 中引入多个模块,包的概念
- 下一篇: Python中调用Linux命令并获取返