新聞中心
在 Python 中,@classmethod裝飾器用于將類中的一個方法聲明為可以使用ClassName.MethodName()調用的類方法。 類方法也可以使用類的對象來調用。

創(chuàng)新互聯(lián)服務項目包括珠海網(wǎng)站建設、珠海網(wǎng)站制作、珠海網(wǎng)頁制作以及珠海網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,珠海網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到珠海省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
@classmethod是 classmethod() 函數(shù)的替代函數(shù)。建議使用@classmethod修飾器代替函數(shù),因為它只是一個語法糖。
@classmethod 特性
- 聲明一個類方法。
- 第一個參數(shù)必須是
cls,可以用來訪問類屬性。 - 類方法只能訪問類屬性,而不能訪問實例屬性。
- 可以使用
ClassName.MethodName()和對象調用類方法。 - 它可以返回類的對象。
下面的示例聲明了一個類方法。
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類包含一個類屬性name和一個實例屬性age。 tostring()方法用@classmethod裝飾器裝飾,使其成為類方法,可以使用Student.tostring()調用。 注意,任何類方法的第一個參數(shù)必須是cls,可以用來訪問類的屬性。您可以給第一個參數(shù)起任何名字,而不是cls。
現(xiàn)在,您可以使用類方法,如下所示。
Example: Access Class Method
>>> Student.tostring()
Student Class Attributes: name=unknown 但是,也可以使用對象調用相同的方法。
Example: Calling Class Method using Object
>>> std = Student()
>>> std.tostring()
Student Class Attributes: name=unknown
>>> Student().tostring()
Student Class Attributes: name=unknown 類方法只能訪問類屬性,而不能訪問實例屬性。如果試圖訪問類方法中的實例屬性,將會引發(fā)錯誤。
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' 類方法也可以用作工廠方法來獲取類的對象,如下所示。
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) 下面調用類方法來獲取對象。
Example: Class Method as Factory Method
>>> std = Student.getobject()
>>> std.name
'Steve'
>>> std.age
25
@classmethod vs @staticmethod
下表列出了類方法和靜態(tài)方法的區(qū)別:
| @classmethod | @staticmethod |
|---|---|
| 聲明一個類方法。 | 聲明一個靜態(tài)方法。 |
| 它可以訪問類屬性,但不能訪問實例屬性。 | 它不能訪問類屬性或實例屬性。 |
可以使用ClassName.MethodName()或object.MethodName()來調用。 | 可以使用ClassName.MethodName()或object.MethodName()來調用。 |
| 它可以用來聲明返回類對象的工廠方法。 | 它不能返回類的對象。 |
文章名稱:Python類方法裝飾器@classmethod
網(wǎng)站鏈接:http://www.dlmjj.cn/article/djjoeop.html


咨詢
建站咨詢
