例項的方法就是在類中定義的函式
class中定義的全部是例項方法,例項方法第乙個引數 self 是例項本身。在class中定義類方法,要加@classmethod;定義靜態方法要加@staticmethod
類方法:方法的第乙個引數都是類物件而不是例項物件(cls)
區別主要體現在兩個方面:
1. 在外部呼叫靜態方法時,可以使用」類名.方法名」的方式,也可以使用」物件名.方法名」的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。
2. 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此限制。
3. 類方法可以被物件呼叫,也可以被例項呼叫;傳入的都是類物件,主要用於工廠方法,具體的實現就交給子類處理
4. 靜態方法引數沒有例項引數 self, 也就不能呼叫例項參
class
fun(object):
__count = 0
def__init__
(self,path=''):
self.path = path
fun.__count += 1
#靜態方法
@staticmethod
defusers
(n):
fun.n = n
return fun.n
#例項方法
defjobs
(self,work):
return fun('%s' % work)
#類方法
@classmethod
defcount
(cls):
return cls.__count
#定製類(特殊方法)
def__str__
(self):
return self.path
__repr__ = __str__
#呼叫print fun.count()
print fun().jobs('job')
print fun.users('tom')
print fun.count()
結果:
0 job
tom
2類方法和靜態方法都可以被類和類例項呼叫,類例項方法僅可以被類例項呼叫。
類方法的隱含呼叫引數是類,而類例項方法的隱含呼叫引數是類的例項,靜態方法沒有隱含呼叫引數。
class
chain
(object):
def__init__
(self,path='/users'):
self.path = path
defusers
(self,path):
return chain('%s/%s' % (self.path,path))
def__getattr__
(slef,path):
return chain('%s/%s' % (self.path,path))
def__str__
(self):
return self.path
__repr__ = __str__
print chain().users('tom').etc.list
結果:
/users/tom/etc/list
class
chian
(object):
def__init__
(self,path=''):
self.path = path
def__getattr__
(self,path):
return chain('%s/%s' % (self.path,path))
def__str__
(self):
return self.path
def__call__
(self,name):
return chain('get %s/:%s' %(self.path,name))
print chain().users('tom').etc.list
結果
get /users/:tom/etc/list
Python基礎學習筆記例項
最近在學習python,看了黑馬老師課程裡的名片管理,自己寫了一遍,感覺還比較有用。用字典存名片內容,包括名片的新增 修改 顯示全部。主函式 import crad def 無限迴圈,0退出 while true 顯示功能選單 card def.show menue action str input...
C Templates學習筆記 例項化
一 on demand例項化 有時候也被稱為隱式例項化或者自動例項化。on demand例項化表明 在使用模板 特化 的地方,編譯器通常需要訪問模板和某些模板成員的整個定義。例子 templateclass c 前置宣告 c p 0 正確,因為這裡不需要知道c的定義 template class c...
python學習筆記 實現收發Email
關於email的基礎知識就不說,直接進入python主題。一 傳送email 1 連線到郵件伺服器 2 登陸 如果需要的話 3 發出服務請求 比如傳送 4 退出 在smtp中我們主要用到的方法是 sendmail from,to,msg mopts,ropts 是把msg從from發給to,esmt...