python基礎 類的繫結方法與非繫結方法(詳解)

2021-10-03 14:52:55 字數 3499 閱讀 8557

三、類的繫結方法

四、非繫結方法

python中,類中的方法有兩類,繫結方法和非繫結方法,今天就來研究一下。

參考博文:

1、繫結方法的定義

繫結給誰,就由誰來呼叫,誰來呼叫就把它當作乙個引數自動傳入。

2、物件的繫結方法

在學習和工作中,我們最常用的就是物件的繫結方法,在python中,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

deftall_info

(self)

:pass

obj = people(

'金鞍少年',18

)print

(obj.tall_info)

# 輸出結果:

>>

從上面可知,類中的tall_info方法,是繫結給物件使用的。下面,我在看看另外一種情況。

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

deftall_info

(self)

:print

('1223'

)obj = people(

'金鞍少年',18

)print

(people.tall_info)

print

(obj.tall_info)

輸出結果:

> 用類來呼叫是當作普通函式使用

>> 而物件來呼叫則為繫結方法

既然python預設類中的方法或函式,都是繫結給物件使用的。那麼類中的繫結方法怎麼解除和物件的繫結繫結關係,進而繫結到類呢?這個時候需要用到:@classmethod方法

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

@classmethod

deftall_info

(cls)

:# cls 和 self都是一種命名習慣習慣, cls作為第乙個引數來表示類本身. 在類方法中用到.

return cls(

'金鞍少年',18

)# 實際是: people('金鞍少年', 18)

obj = people.tall_info(

)print

(obj.name, obj.age)

# 金鞍少年 18

print

(people.tall_info)

print

(obj.tall_info)

# >

# >

根據上述結果所知:

1、和物件繫結方法一樣:繫結給類,就由類來呼叫,並將類當作第乙個引數傳入。

2、和物件繫結方法不同:當物件在呼叫類的繫結方法時,也會預設把類當作引數傳遞進去。

ps:cls 和 self都是一種命名習慣習慣, cls作為第乙個引數來表示類本身. 在類方法中用到

在類中有很多普通的方法,本身不需要繫結給物件或者類來使用,誰都可以呼叫,沒有自動傳值效果,這就是非繫結方法。在python類中會預設給方法(函式)乙個例項,用於繫結給物件;如何解除這個繫結關係,需要用到,@staticmethod方法

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

defprint_info()

:# 去掉了self,會報錯

print

('我只是乙個輸出資訊,不需要繫結物件和類來使用,也不需要引數傳進來'

)obj = people(

'金鞍少年',18

)people.print_info(

)obj.print_info(

)結果:報錯

typeerror: print_info(

) takes 0 positional arguments but 1 was given

也就是print_info ,這個方法本身是不需要繫結物件和類來使用,但去掉了類中預設給的例項,就會報錯!

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

@staticmethod

defprint_info()

:print

('我只是乙個輸出資訊,用不到引數,即不需要引數傳進來'

)obj = people(

'金鞍少年',18

)people.print_info(

)#我只是乙個輸出資訊,用不到引數,即不需要引數傳進來

obj.print_info(

)# 我只是乙個輸出資訊,用不到引數,即不需要引數傳進來

print

(people.print_info)

print

(obj.print_info)

# #

結果:使用 @staticmethod 方法,即可正常使用函式,並將原本預設繫結給物件使用的方法,變為乙個普通函式。既然是函式,也就可以遵循函式的使用要求,需要幾個函式,就傳入幾個函式。

class

people

:def

__init__

(self, name, age)

: self.name = name

self.age = age

@staticmethod

defprint_info

(x,y)

:# print('我只是乙個輸出資訊,用不到引數,即不需要引數傳進來')

print

('我是傳入的引數:%s--%s'

%(x, y)

)obj = people(

'金鞍少年',18

)people.print_info(1,

2)obj.print_info(1,

2)結果: 我是傳入的引數:1--

2 我是傳入的引數:1--

2

python類的繫結方法與非繫結方法

一 繫結方法 首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age deftalk self pass...

Python中繫結與未繫結的類方法

像函式一樣,python中的類方法也是一種物件。由於既可以通過例項也可以通過類來訪問方法,所以在python裡有兩種風格 未繫結的類方法 沒有self 通過類來引用方法返回乙個未繫結方法物件。要呼叫它,你必須顯示地提供乙個例項作為第乙個引數。繫結的例項方法 有self 通過例項訪問方法返回乙個繫結的...

python 類的繫結方法和非繫結方法

首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age def talk self pass p peo...