Python中類 例項 方法之間的關係

2021-07-23 16:56:26 字數 1901 閱讀 9866

本文參考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...