本文參考python核心程式設計
類的強大與否取決於它的功能,我們改進類的方法之一就是給類新增功能。類的功能有乙個更為通俗的名字就是方法,在python中,方法定義在類的定義中,但是只能被例項所呼叫,呼叫乙個方法的最終途徑必須是這樣的:(1)定義類和類中的方法(2)建立乙個例項或者說將類例項化(3)最後用這個例項呼叫方法
class
mydatawithmethod
(object):
# 定義類
defprintfoo
(self):
# 定義方法
print
'you invoked printfoo()!'
在上面的例子中,在定義方法的時候有乙個self引數,在所有的方法宣告中都要用到這個引數,這個引數代表例項物件本身,當你用例項呼叫方法的時候,由直譯器自動的把例項物件本身悄悄的傳遞給方法,不需要你自己傳遞self進來,例如有乙個帶有兩個引數的方法,你所有呼叫只需要傳遞進來第二個引數。
現在我們來例項化這個類,然後來呼叫這個方法:
>>> myobj = mydatawithmethod() # 建立例項
>>> myobj.printfoo() # 現在呼叫方法
you invoked printfoo()!
在python中init()其實是乙個初始化方法,是乙個特殊的方法,通過下面的例子可能更容易理解:
#!/usr/bin/env python
class
a(object):
def__init__
(self,nm,ph):
self.name = nm
self.phone = ph
print
'the name of the instance is %s' % self.name
print
'the name is %s' % self.name
print
'the phonenumber is %s' % self.phone
defupdatephone
(self,newph):
self.phone = newph
print
'update the instance of %s' % self.name
print
'the update phonenumber is %s' % self.phone
a=a('jack','18811223344')
a.updatephone('88888888888')
執行結果是:
name
ofthe instance is jack
thename
is jack
the phonenumber is
18811223344
update the instance of jack
the update phonenumber is
88888888888
在上面的例子中定義了兩個方法,乙個是init(),另乙個是updatephone(),你可以認為例項化是對init()的一種隱式的呼叫,因為傳給addrbookentry()的引數完全與init()接收到的引數是一樣的(除了self,它是自動傳遞的)。這裡我個人的理解是在例項化時傳遞給self的引數就是a。語句a=a(『jack』,』18811223344』)就是例項化呼叫,它會自動呼叫init(),你可以理解成把方法中的self用例項名字替換掉。
如果沒有設定預設引數,那麼必須傳遞給init相應個數的引數。
python中的例項方法 類方法 靜態方法
class test object a 1 def init self,a self.a a definstance print self print self.a classmethod defclass fun cls print cls.a staticmethod defstatic fun...
例項方法 類方法 靜態方法之間的比較
看下面一串 class mycls object age 20 def init self self.age 18 def a self return self.age classmethod def b cls return cls.age staticmethod def c return my...
Python 中的例項方法 類方法 靜態方法的區別
1 關於引數的區別 例項方法 定義例項方法是最少有乙個形參 例項物件,通常用 self 類方法 定義類方法的時候最少有乙個形參 類物件,通常用 cls 靜態方法 定義靜態方法的時候可以不定義形參 2 關於方法定義時候新增裝飾器的區別 例項方法 不需要新增裝飾器 類方法 需要新增裝飾器 classme...