Python 一切皆對象,基于此概念,對 類 class 有以下特點:
類與實例的屬性
類對象創(chuàng)建可選擇定義類屬性,創(chuàng)建實例對象時,實例屬性自動執(zhí)行類的__init__方法初始化
實例對象自動繼承相應的類屬性(如果有),但實例屬性優(yōu)先級更高
實例方法,類方法,靜態(tài)方法的參數
實例方法是一般函數但實例方法需要傳入self參數(與一般函數的區(qū)別)
類方法和靜態(tài)方法是通過裝飾器實現的函數,類方法需要傳入cls參數,靜態(tài)方法無需傳入self參數或者是cls參數(但也能傳入參數)
其中self參數必須指向實例對象,cls參數指向定義的類對象(self與cls是約定俗成的,原則上可以用其它名字)
方法與函數
其中方法是在對象語境下的函數,實例調用實例方法即調用方法,類調用實例方法即調用函數
類舉例
class Toy(object): # 此處此類可理解為設計一個Toy的藍圖 # 賦值定義類屬性,記錄所有玩具數量 count = 0 def __init__(self, name): # 用于實例初始化 self.name = name # 類屬性 +1 Toy.count += 1 @classmethod # 此裝飾器表示是類方法,類方法無需創(chuàng)建實例對象即可調用,最為靈活 def show_toy_count(cls): print('玩具對象的數量 %d' % cls.count, cls) @staticmethod # 此裝飾器表示是靜態(tài)方法,靜態(tài)方法本質上是封裝在類對象內的的函數,常用于測試 def hi(): print('Hello!') # 實例方法 def beybey(self): print('Sad!', self) # 創(chuàng)建實例對象 toy1 = Toy('樂高') toy1.hand = 2 toy2 = Toy('泰迪熊') toy3 = Toy('哥斯拉') print(toy1.name, toy2.name, toy3.name) # 點語法調用類方法與靜態(tài)方法,如:類名.方法 Toy.show_toy_count() Toy.hi() # 實例對象調用類方法時,與類對象調用類方法無異,但實際上調用仍通過實例對象繼承的類對象 toy1.show_toy_count() print(toy1.hand) # 實例對象調用靜態(tài)方法時,與類對象調用靜態(tài)方法無異,但實際上調用仍通過實例對象繼承的類對象 toy2.hi() # 實例對象調用實例方法,Python的解釋器內部,當我們調用toy3.beybey()時,實際上Python解釋成Toy.beybey(toy3) toy3.beybey() # Toy.beybey() # 錯誤語法,self必須指向實例對象,此處實例方法指向類對象而不是實例對象 Toy.beybey(toy3) # 類與其實例的類型和內存地址 print(type(Toy), id(Toy), type(toy3), id(toy3))
輸出結果
樂高 泰迪熊 哥斯拉
玩具對象的數量 3 class '__main__.Toy'>
Hello!
玩具對象的數量 3 class '__main__.Toy'>
2
Hello!
Sad! __main__.Toy object at 0x000001FD9F794D60>
Sad! __main__.Toy object at 0x000001FD9F794D60>
class 'type'> 2188806599664 class '__main__.Toy'> 2188813880672
類方法與靜態(tài)方法舉例
class Cat: # 或者class Cat()不寫父對象形式定義類對象,會默認繼承祖先object對象 name = '小敏' @classmethod def www(cls): print('%s 干嘛!' % cls.name) # cls.call() # 類方法可以調用靜態(tài)方法 @staticmethod def call(): print('喵喵~') Cat.name = '小敏臭弟弟' print(Cat.name) # Cat.www() # 靜態(tài)方法可以調用類方法 Cat.www() Cat.call() # 沒有定義實例方法可以創(chuàng)建實例對象繼承并使用其中方法 cat1 = Cat() cat1.www() cat1.call()
輸出結果
小敏 干嘛!
喵喵~
小敏臭弟弟
小敏臭弟弟 干嘛!
喵喵~
小敏臭弟弟
祖先對象中包含的基本方法
print(dir(object)) ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
類 class 是 Python 中最核心的對象,定義類通常要寫好類屬性,實例方法,類方法,靜態(tài)方法等幾部份。把類和繼承的類的實例比作函數中的主函數和子函數,那么類屬性可認為是全局變量,實例屬性可認為是局部變量;把類看成葫蘆,實例方法則是方便我們照畫瓢的同時,提供因地制宜的可能;類方式能夠使我們更高效的使用類的功能而靜態(tài)方法往往能幫助我們了解類的功能。
類 的各方法間并不是彼此毫不相干,而是有著很強的共性,具體使用時應靈活運用,不應局限在抽象的定義之中。
到此這篇關于Python中類對象的文章就介紹到這了,更多相關Python類對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!