python 一切皆物件,基於此概念,對 類 class 有以下特點:
類與例項的屬性
類物件建立可選擇定義類屬性,建立例項物件時,例項屬性自動執行類的__init__方法初始化
例項物件自動繼承相應的www.cppcns.com類屬性(如果有),但例項屬性優先順序更高
例項方法,類方法,靜態方法的引數
例項方法是一般函式但例項方法需要傳入self引數(與一般函式的區別)
類方法和靜態方法是通過裝飾器實現的函式,類方法需要傳入cls引數,靜態方法無需傳入self引數或者是cls引數(但也能傳入引數)
其中self引數必須指向例項物件,cls引數指向定義的類物件(self與cls是約定俗成的,原則上可以用其它名字)
方法與函式
其中方法是在物件語境下的函式,例項呼叫例項方法即呼叫方法,類呼叫例項方法即呼叫函式
類舉例class toy(object): # 此處此類可理解為設計乙個toy的藍圖
# 賦值定義類屬性,記錄所有玩具數量
count = 0
def __init__(self, name): # 用於例項初始化
self.name = name
# 類屬性 +1
toy.count += 1
@classmethod # 此裝飾器表示是類方法,類方法無需建立例項物件即可呼叫,最為靈活
def show_toy_count(cls):
print('玩具物件的數量 %d' % cls.count, cls)
@staticmethod # 此裝飾器表示是靜態方法,靜態方法本質上是封裝在類物件內的的函式,常用於測試
def hi():
print('hello!')
# 例項方法
def beybey(self):
print('sad!', self)
# 建立例項物件
toy1 = toy('樂高')
toy1.hand = 2
toy2 = toy('泰迪熊')
toy3 = toy('哥斯拉')
print(toy1.name, toy2.name, toy3.name)
# 點語法呼叫類方法與靜態方法,如:類名.方法
toy.show_toy_count()
toy.hi()
# 例項物件呼叫類方法時,與類物件呼叫類方法無異,但實際上呼叫仍通過例項物件繼承的類物件
toy1.show_toy_count()
print(toy1.hand)
# 例項物件呼叫靜態方法時,與類物件呼叫靜態方法無異,但實際上呼叫仍通過例項物件繼承的類物件
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
hello!
玩具物件的數量 3
2hello!
sad! <__main__.toy object at>
sad! <__main__.toy object at>
2188806599664 2188813880672
類方法與靜態方法舉例
class cat: # 或者class cat()不寫父物件形式定義類物件,會預設繼承祖先object物件
name = '小敏'
@classmethod
def www(cls):
print('%s 幹嘛!' % cls.name)
# cls.call() # 類方法可以呼叫靜態方法
@staticmethod
def call():
print('喵喵~')
cat.name = '小敏臭弟弟'
pr# cat.www() # 靜態方法可以呼叫類方法
cat.www()
cat.call()
# 沒有定義例項方法可以建立例項物件繼承並使用其中方法
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__', '__sizeijcypof__', '__str__', '__subclasshook__']
類 class 是 python 中最核心的物件,定義類通常要寫好類屬性,例項方法,類方法,靜態方法等幾部份。把類和繼承的類的例項比作函式中的主函式和子函式,那麼類屬性可認為是全域性變數,例項屬性可認為是區域性變數;把類看成葫蘆,例項方法則是方便我們照畫瓢的同時,提供因地制宜的可能;類方式能夠使我們更高效的使用類的功能而靜態方法往往能幫助我們了解類的功能。
類 的各方法間並不是彼此毫不相干,而是有著很強的共性,具體使用時應靈活運用,不應侷限在抽象的定義之中。
Python中如何匯入類示例詳解
前言 隨著我們不斷地在乙個檔案中新增新的功能,就會使得檔案變得很長。即便使用了繼承,也抑制程式設計客棧不住類的成長。為了解決這一問題,我們可以將類儲存在模組中,然後在主程式中匯入所需的模組,這樣可以讓檔案盡可能保持整潔,從而實現更好的管理。匯入類是一種很有效的程式設計方式。這樣我們就可以把大部分邏輯...
python中類與物件之間的關係詳解
在搜尋平台上關於類以及物件都已經被霸屏了,主要的問題無非就是兩個,乙個是理解二者,另乙個就是理解二者之間的使用關係,對於小編來說,兩者統一跟大家講清,相信也很難程式設計客棧被大家消化,這不,給大家想出來比較好理解的方式,用最簡單的話,快速交大家上手,可別不信,簡單易懂內容如www.cppcns.co...
spring MVC中傳遞物件引數示例詳解
前言 初學j a,由於專案緊急,來不及仔細的研究,在傳遞引數時就老老實實的乙個乙個的採用 requestparam註解方式傳遞,最近認真看了一下,發現j a也具有類似aswww.cppcns.comp.net mvc傳遞物件做引數的方式,即採用 modelattribute註解的方式,接收方式如下 ...