国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

Python classmethod()方法

2023-04-24 19:21:36
字體:
來源:轉載
供稿:網友

python classmethod()是Python標準庫中的一個內置方法。在Python中,有三種類型的方法,分別是:實例方法、類方法和靜態(tài)方法。

這篇文章首先介紹一下類方法的含義及使用方法。

classmethod()方法是什么

在Python中,類方法是可以使用類名直接調用的方法,類方法可以在類的所有對象中進行共享。classmethod()方法可以把類中的一個方法轉化為類方法,但要求類中定義的那個方法的第一個參數是 cls ,當然這只是約定俗成的,使用其他標識符也可以,主要用于隱式的表示類自身,以調用類的屬性、方法,以及實例化對象等,這點與實例方法中的 self 參數相似。

類方法即可以使用類來調用(如C.f()),又可以使用類的實例來調用(如C().f())。如果類方法由派生類來調用,則派生類的對象將作為classmethod()的第一個參數。

Python中的類方法與Java、C#等中的靜態(tài)方法不同,這些問題將在今后的文章中進行探討。

Python classmethod()方法

classmethod()的語法

該方法的語法格式如下:

classmethod(function)

參數

function:用于指定類中轉換為類方法的方法名稱,當然也應該包含類名。

返回值

該函數沒有返回值。

classmethod()使用示例

下面使用實例來說明classmethod()方法的具體使用過程。

class Hello:
    word = "你好"

    def SayHello(cls):
        print(cls.word)

#定義一個實例
h = Hello()
#實例調用SayHello
h.SayHello()
#Hello.SayHello() #這時使用會報錯

#將SayHello指定為類方法
Hello.SayHello= classmethod(Hello.SayHello)
#用實例來調用
h.SayHello() #你好
#用類方法
Hello.SayHello() #你好

#用實例修改word的值
h.word="關注:優(yōu)雅的代碼"
h.SayHello() #你好
Hello.SayHello() #你好

#用類名修改word的值
Hello.word="優(yōu)雅的代碼"
h.SayHello() #優(yōu)雅的代碼
Hello.SayHello() #優(yōu)雅的代碼

輸出結果如下:(上面代碼為了讓大家看得清楚,使用注釋方法也注釋了輸出內容。)

你好
你好
你好
你好
你好
優(yōu)雅的代碼
優(yōu)雅的代碼

從上面的代碼及輸出結果可以看出:

(1)類方法中可以訪問類的變量和方法;

(2)類方法可以使用類名調用,也可以使用類的實例調用;

(3)把一個方法轉換成類方法后,使用實例調用時只能讀取類共享的變量值,無法獲取實例的變量值;

(4)類方法不能獲取實例的變量值,只能讀取類共享的變量值,即類變量的默認值或使用類名調用變量修改的值。

下面再看一個例子:

class Hello:
    word = "你好"

    def SayHello(self):
        print(self.word)

    def Say(cls, w):
        cls.word = w
        cls.SayHello()

Hello.SayHello = classmethod(Hello.SayHello)
Hello.Say = classmethod(Hello.Say)

Hello.SayHello()
Hello.Say("歡迎關注微信訂閱號:優(yōu)雅的代碼")

輸出結果如下所示:

你好
歡迎關注微信訂閱號:優(yōu)雅的代碼

這段代碼主要演示類方法帶有其它參數的情況。

classmethod()方法是在Python 2.2版本加進來的,但很明顯這種定義類方法的過程還是很麻煩,在Python2.4版本中使用方法修飾符的方法來實現,即在類中需要定義類方法上面使用@classmethod修飾符來指定該方法為類方法。其基本語法格式如下:

class className:
    @classmethod
    def funname(cls, arg1,arg2,...):
        #方法的相關代碼

上面的@classmethod是funname()方法的修飾符,它指示funname()是一個類方法。下面看一個具體的例子:

class Student:
    age = 23

    @classmethod
    def printAge(cls):
        print(cls.age)

Student.printAge()

輸出結果:

23

使用@classmethod修飾符指定的類方法與上面所講的要求相同。

以上講解了關于Python中classmethod()方法和@classmethod修飾符的作用,如有問題,歡迎留言。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐安县| 衡南县| 双流县| 衡水市| 小金县| 淮安市| 南宁市| 吴忠市| 黑河市| 孝昌县| 乌恰县| 高清| 卫辉市| 兴山县| 万山特区| 吉木萨尔县| 武汉市| 建始县| 克什克腾旗| 定襄县| 斗六市| 宁明县| 政和县| 望谟县| 伊通| 乌拉特前旗| 四川省| 尉犁县| 怀仁县| 通许县| 丹江口市| 威信县| 福海县| 阿拉善左旗| 河南省| 杭锦旗| 区。| 乾安县| 舞钢市| 增城市| 奉节县|