定義在類中的**塊叫方法,python的方法分為『例項方法』、『類方法』、『靜態方法』,按照從前到後的順序它們和例項物件的依賴程度依次降低
class
demo:
sfield = 100
# 靜態屬性
def__init__
(self, value):
''' 初始化方法 '''
self.value = value
defixmethod
(self):
''' 例項方法,測試能否呼叫例項屬性 '''
print('ixmethod ->', self.value)
defiymethod
(self):
''' 例項方法,測試能否呼叫靜態屬性 '''
print('iymethod ->', self.sfield)
defcxmethod
(cls):
''' 偽·類方法,測試能否呼叫例項屬性 '''
print('cxmethod ->', cls.value)
@classmethod
defcymethod
(cls):
''' 真·類方法,測試能否呼叫靜態屬性 '''
print('cymethod ->', cls.sfield)
defsxmethod
():''' 偽·靜態方法,嘗試列印一條語句 '''
@staticmethod
defsymethod
():''' 真·靜態方法,嘗試列印一條語句 '''
print('banana')
>>> d = demo(1) # value初始值為1
>>> d.ixmethod()
ixmethod -> 1
>>> demo.ixmethod()
traceback (most recent call last):
file
"", line 1, in
typeerror: ixmethod() missing 1 required positional argument: 'self'
>>> d.iymethod()
iymethod -> 100
>>> demo.iymethod()
traceback (most
recent
call
last):
file "", line 1, in
typeerror: iymethod() missing 1 required positional argument: 'self'
>>> d.cxmethod()
cxmethod -> 1
>>> demo.cxmethod()
traceback (most
recent
call
last):
file "", line 1, in
typeerror: cxmethod() missing 1 required positional argument: 'cls'
>>> d.cymethod()
cymethod -> 100
>>> demo.cymethod()
cymethod -> 100
>>> d.sxmethod()
traceback (most
recent
call
last):
file "", line 1, in
typeerror: sxmethod() takes 0 positional arguments but 1 was given
>>> demo.sxmethod()
>>> d.symethod()
banana
>>> demo.symethod()
banana
結論如下
1)類方法和靜態方法必須要在方法頭部加上@開始的修飾符,否則不能視為完全的類方法或靜態方法;特別是類方法,如果沒有加@開始的修飾符,效果和例項方法等價,因為self不是關鍵字,如果僅僅寫下cls編譯器並不能識別
2)按照例項方法、類方法、靜態方法的順序,它們對該類的依賴性逐漸降低:例項方法既可以方法例項屬性,也可以方法靜態屬性(self呼叫);類方法只能呼叫靜態屬性(cls呼叫);而靜態方法因為沒有引數繫結到該類所以僅僅提供函式功能,不能呼叫例項屬性或靜態屬性
3)類的例項物件在呼叫類中定義的方法時,會把自身作為第乙個引數傳進去(如果有引數的話),這也是為什麼不寫@classmethod的偽·類方法實際上還是例項方法的本質原因
乙個例子理解C 位移
來自 很多人覺得位移這東西很複雜,二進位制一堆0 1看不懂。其實很簡單。位移理解可能簡單一些 其實位移就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當於乘8,左移4位相當於...
乙個例子理解C 位移
很多人提問,不知道c 位移,可能有些人在面試中也遇到過 其實很簡單。c 位移運算子 左移 右移 位移理解可能簡單一些 其實 就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當...
Python字典應用的乙個例子
python view plain copy usr bin env python 定義乙個空字典 db defnewuser prompt login desired while true name raw input prompt 根據關鍵字name看字典中是否已存在此鍵值對 ifdb.has ...