亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中cls和self的功能講解

發布時間:2021-09-09 11:44:22 來源:億速云 閱讀:190 作者:chen 欄目:大數據

本篇內容主要講解“python中cls和self的功能講解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python中cls和self的功能講解”吧!

一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法。

而使用@staticmethod或@classmethod,就可以不需要實例化,直接類名.方法名()來調用。

這有利于組織代碼,把某些應該屬于某個類的函數給放到那個類里去,同時有利于命名空間的整潔。

class A(object):
    a = 'a'
    @staticmethod
    def foo1(name):
        print 'hello', name
    def foo2(self, name):
        print 'hello', name
    @classmethod
    def foo3(cls, name):
        print 'hello', name

首先定義一個類A,類A中有三個函數,foo1為靜態函數,用@staticmethod裝飾器裝飾,這種方法與類有某種關系但不需要使用到實例或者類來參與。如下兩種方法都可以正常輸出,也就是說既可以作為類的方法使用,也可以作為類的實例的方法使用。

a = A()
a.foo1('mamq') # 輸出: hello mamq
A.foo1('mamq')# 輸出: hello mamq

foo2為正常的函數,是類的實例的函數,只能通過a調用。

a.foo2('mamq') # 輸出: hello mamq
A.foo2('mamq') # 報錯: unbound method foo2() must be called with A instance as first argument (got str instance instead)

foo3為類函數,cls作為第一個參數用來表示類本身. 在類方法中用到,類方法是只與類本身有關而與實例無關的方法。如下兩種方法都可以正常輸出。

a.foo3('mamq') # 輸出: hello mamq
A.foo3('mamq') # 輸出: hello mamq

但是通過例子發現staticmethod與classmethod的使用方法和輸出結果相同,再看看這兩種方法的區別。

既然@staticmethod和@classmethod都可以直接類名.方法名()來調用,那他們有什么區別呢
從它們的使用上來看,
@staticmethod不需要表示自身對象的self和自身類的cls參數,就跟使用函數一樣。
@classmethod也不需要self參數,但第一個參數需要是表示自身類的cls參數。
如果在@staticmethod中要調用到這個類的一些屬性方法,只能直接類名.屬性名或類名.方法名。
而@classmethod因為持有cls參數,可以來調用類的屬性,類的方法,實例化對象等,避免硬編碼。

也就是說在classmethod中可以調用類中定義的其他方法、類的屬性,但staticmethod只能通過A.a調用類的屬性,但無法通過在該函數內部調用A.foo2()。修改上面的代碼加以說明:

class A(object):
    a = 'a'
    @staticmethod
    def foo1(name):
        print 'hello', name
        print A.a # 正常
        print A.foo2('mamq') # 報錯: unbound method foo2() must be called with A instance as first argument (got str instance instead)
    def foo2(self, name):
        print 'hello', name
    @classmethod
    def foo3(cls, name):
        print 'hello', name
        print A.a
        print cls().foo2(name)

到此,相信大家對“python中cls和self的功能講解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹰潭市| 福海县| 资阳市| 云南省| 万全县| 深水埗区| 南通市| 潮安县| 顺平县| 寻乌县| 宁乡县| 嘉荫县| 吉林省| 绥江县| 玉环县| 溆浦县| 黄平县| 芷江| 吉林省| 浮山县| 逊克县| 井陉县| 容城县| 榆树市| 德江县| 渝北区| 梁平县| 曲阳县| 木里| 利津县| 成武县| 富蕴县| 扶余县| 呼玛县| 肃北| 通辽市| 余庆县| 涟源市| 准格尔旗| 林州市| 新田县|