新聞中心
在 Python 中,@classmethod裝飾器用于將類中的一個(gè)方法聲明為可以使用ClassName.MethodName()調(diào)用的類方法。 類方法也可以使用類的對(duì)象來(lái)調(diào)用。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括珠海網(wǎng)站建設(shè)、珠海網(wǎng)站制作、珠海網(wǎng)頁(yè)制作以及珠海網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,珠海網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到珠海省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
@classmethod是 classmethod() 函數(shù)的替代函數(shù)。建議使用@classmethod修飾器代替函數(shù),因?yàn)樗皇且粋€(gè)語(yǔ)法糖。
@classmethod 特性
- 聲明一個(gè)類方法。
- 第一個(gè)參數(shù)必須是
cls,可以用來(lái)訪問(wèn)類屬性。 - 類方法只能訪問(wèn)類屬性,而不能訪問(wèn)實(shí)例屬性。
- 可以使用
ClassName.MethodName()和對(duì)象調(diào)用類方法。 - 它可以返回類的對(duì)象。
下面的示例聲明了一個(gè)類方法。
Example: @classmethod
class Student:
name = 'unknown' # class attribute
def __init__(self):
self.age = 20 # instance attribute
@classmethod
def tostring(cls):
print('Student Class Attributes: name=',cls.name) 上圖中,Student類包含一個(gè)類屬性name和一個(gè)實(shí)例屬性age。 tostring()方法用@classmethod裝飾器裝飾,使其成為類方法,可以使用Student.tostring()調(diào)用。 注意,任何類方法的第一個(gè)參數(shù)必須是cls,可以用來(lái)訪問(wèn)類的屬性。您可以給第一個(gè)參數(shù)起任何名字,而不是cls。
現(xiàn)在,您可以使用類方法,如下所示。
Example: Access Class Method
>>> Student.tostring()
Student Class Attributes: name=unknown 但是,也可以使用對(duì)象調(diào)用相同的方法。
Example: Calling Class Method using Object
>>> std = Student()
>>> std.tostring()
Student Class Attributes: name=unknown
>>> Student().tostring()
Student Class Attributes: name=unknown 類方法只能訪問(wèn)類屬性,而不能訪問(wèn)實(shí)例屬性。如果試圖訪問(wèn)類方法中的實(shí)例屬性,將會(huì)引發(fā)錯(cuò)誤。
Example: @classmethod
class Student:
name = 'unknown' # class attribute
def __init__(self):
self.age = 20 # instance attribute
@classmethod
def tostring(cls):
print('Student Class Attributes: name=',cls.name,', age=', cls.age) Example: Access Class Method
>>> Student.tostring()
Traceback (most recent call last):
File "", line 1, in
Student.tostring()
File "", line 7, in display
print('Student Class Attributes: name=',cls.name,', age=', cls.age)
AttributeError: type object 'Student' has no attribute 'age' 類方法也可以用作工廠方法來(lái)獲取類的對(duì)象,如下所示。
Example: @classmethod
class Student:
def __init__(self, name, age):
self.name = name # instance attribute
self.age = age # instance attribute
@classmethod
def getobject(cls):
return cls('Steve', 25) 下面調(diào)用類方法來(lái)獲取對(duì)象。
Example: Class Method as Factory Method
>>> std = Student.getobject()
>>> std.name
'Steve'
>>> std.age
25
@classmethod vs @staticmethod
下表列出了類方法和靜態(tài)方法的區(qū)別:
| @classmethod | @staticmethod |
|---|---|
| 聲明一個(gè)類方法。 | 聲明一個(gè)靜態(tài)方法。 |
| 它可以訪問(wèn)類屬性,但不能訪問(wèn)實(shí)例屬性。 | 它不能訪問(wèn)類屬性或?qū)嵗龑傩浴?/td> |
可以使用ClassName.MethodName()或object.MethodName()來(lái)調(diào)用。 | 可以使用ClassName.MethodName()或object.MethodName()來(lái)調(diào)用。 |
| 它可以用來(lái)聲明返回類對(duì)象的工廠方法。 | 它不能返回類的對(duì)象。 |
本文標(biāo)題:Python類方法裝飾器@classmethod
瀏覽地址:http://fisionsoft.com.cn/article/djjoeop.html


咨詢
建站咨詢
