三、類的繫結方法
四、非繫結方法
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...