最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實例方法與類方法和靜態(tài)方法介紹與區(qū)別分析

 更新時間:2022年10月11日 11:42:40   作者:Python熱愛者  
在 Python 中,實例方法(instance method),類方法(class method)與靜態(tài)方法(static method)經(jīng)常容易混淆。本文通過代碼例子來說明它們的區(qū)別

1.實例方法

Python 的實例方法用得最多,也最常見。我們先來看 Python 的實例方法。

class Kls(object):
    def __init__(self, data):
        self.data = data
    def printd(self):
        print(self.data)
ik1 = Kls('leo')
ik2 = Kls('lee')
ik1.printd()
ik2.printd()

輸出:

leo
lee

上述例子中,printd 為一個實例方法。實例方法第一個參數(shù)為self,當(dāng)使用ik1.printd()調(diào)用實例方法時,實例ik1會傳遞給self參數(shù),這樣self參數(shù)就可以引用當(dāng)前正在調(diào)用實例方法的實例。利用實例方法的這個特性,上述代碼正確輸出了兩個實例的成員數(shù)據(jù)。

2.類方法

Python 的類方法采用裝飾器 @classmethod 來定義,我們直接看例子。

class Kls(object):
    num_inst = 0
    def __init__(self):
        Kls.num_inst = Kls.num_inst + 1
    @classmethod
    def get_no_of_instance(cls):
        return cls.num_inst
ik1 = Kls()
ik2 = Kls()
print (ik1.get_no_of_instance())
print (Kls.get_no_of_instance())

輸出

2
2

在上述例子中,我們需要統(tǒng)計類Kls實例的個數(shù),因此定義了一個類變量num_inst來存放實例個數(shù)。通過裝飾器 @classmethod 的使用,方法 get_no_of_instance 被定義成一個類方法。

在調(diào)用類方法時,Python 會將類(class Kls)傳遞給cls,這樣在get_no_of_instance內(nèi)部就可以引用類變量num_inst。

由于在調(diào)用類方法時,只需要將類型本身傳遞給類方法,因此,既可以通過類也可以通過實例來調(diào)用類方法。

注意,實例方法只可以通過實例來調(diào)用。

3.靜態(tài)方法

在開發(fā)中,我們常常需要定義一些方法,這些方法跟類有關(guān),但在實現(xiàn)時并不需要引用類或者實例,例如,設(shè)置環(huán)境變量,修改另一個類的變量,等。這個時候,我們可以使用靜態(tài)方法。

Python 使用裝飾器 @staticmethod 來定義一個靜態(tài)方法。

IND = 'ON'
class Kls(object):
    def __init__(self, data):
        self.data = data
    @staticmethod
    def checkind():
        return IND == 'ON'
    def do_reset(self):
        if self.checkind():
            print('Reset done for: %s' % self.data)
    def set_db(self):
        if self.checkind():
            print('DB connection made for: %s' % self.data)
ik1 = Kls(24)
ik1.do_reset()
ik1.set_db()

輸出:

Reset done for: 24
DB connection made for: 24

在代碼中,我們定義了一個全局變量IND,由于IND跟類Kls相關(guān),所以我們將方法checkind放置在類Kls中定義。方法checkind只需檢查IND的值,而不需要引用類或者實例,因此,我們將方法checkind定義為靜態(tài)方法。

對于靜態(tài)方法,Python 并不需要傳遞類或者實例,因此,既可以使用類也可以使用實例來調(diào)用靜態(tài)方法。

4.實例方法與類方法和靜態(tài)方法的區(qū)別

我們用代碼說明實例方法,類方法,靜態(tài)方法的區(qū)別。注意下述代碼中方法foo,class_foo,static_foo的定義以及使用。

'''
學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
class Kls(object):
    def foo(self, x):
        print('executing foo(%s,%s)' % (self, x))
    @classmethod
    def class_foo(cls,x):
        print('executing class_foo(%s,%s)' % (cls,x))
    @staticmethod
    def static_foo(x):
        print('executing static_foo(%s)' % x)
ik = Kls()
# 實例方法
ik.foo(1)
print(ik.foo)
print('==========================================')
# 類方法
ik.class_foo(1)
Kls.class_foo(1)
print(ik.class_foo)
print('==========================================')
# 靜態(tài)方法
ik.static_foo(1)
Kls.static_foo('hi')
print(ik.static_foo)

輸出:

executing foo(<__main__.Kls object at 0x0551E190>,1)
<bound method Kls.foo of <__main__.Kls object at 0x0551E190>>
==========================================
executing class_foo(<class '__main__.Kls'>,1)
executing class_foo(<class '__main__.Kls'>,1)
<bound method type.class_foo of <class '__main__.Kls'>>
==========================================
executing static_foo(1)
executing static_foo(hi)
<function static_foo at 0x055238B0>

對于實例方法,調(diào)用時會把實例ik作為第一個參數(shù)傳遞給self參數(shù)。因此,調(diào)用ik.foo(1)時輸出了實例ik的地址。

對于類方法,調(diào)用時會把類Kls作為第一個參數(shù)傳遞給cls參數(shù)。因此,調(diào)用ik.class_foo(1)時輸出了Kls類型信息。

前面提到,可以通過類也可以通過實例來調(diào)用類方法,在上述代碼中,我們再一次進(jìn)行了驗證。

對于靜態(tài)方法,調(diào)用時并不需要傳遞類或者實例。其實,靜態(tài)方法很像我們在類外定義的函數(shù),只不過靜態(tài)方法可以通過類或者實例來調(diào)用而已。

值得注意的是,在上述例子中,foo只是個函數(shù),但當(dāng)調(diào)用ik.foo的時候我們得到的是一個已經(jīng)跟實例ik綁定的函數(shù)。調(diào)用foo時需要兩個參數(shù),但調(diào)用ik.foo時只需要一個參數(shù)。foo跟ik進(jìn)行了綁定,因此,當(dāng)我們打印ik.foo時,會看到以下輸出:

<bound method Kls.foo of <__main__.Kls object at 0x0551E190>>

當(dāng)調(diào)用ik.class_foo時,由于class_foo是類方法,因此,class_foo跟Kls進(jìn)行了綁定(而不是跟ik綁定)。當(dāng)我們打印ik.class_foo時,輸出:

<bound method type.class_foo of <class '__main__.Kls'>>

當(dāng)調(diào)用ik.static_foo時,靜態(tài)方法并不會與類或者實例綁定,因此,打印ik.static_foo(或者Kls.static_foo)時輸出:

<function static_foo at 0x055238B0>

概括來說,是否與類或者實例進(jìn)行綁定,這就是實例方法,類方法,靜態(tài)方法的區(qū)別。

到此這篇關(guān)于Python實例方法與類方法和靜態(tài)方法介紹與區(qū)別分析的文章就介紹到這了,更多相關(guān)Python實例方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何從Python的cmd中獲得.py文件參數(shù)

    如何從Python的cmd中獲得.py文件參數(shù)

    這篇文章主要介紹了如何從Python的cmd中獲得.py文件參數(shù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python的版本

    ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python的版本

    這篇文章主要給大家介紹了關(guān)于ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python版本的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ubuntu具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • Python?多線程爬取案例

    Python?多線程爬取案例

    這篇文章主要介紹了Python?多線程爬取案例,爬蟲屬于I/O密集型的程序,所以使用多線程可以大大提高爬取效率,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Python continue繼續(xù)循環(huán)用法總結(jié)

    Python continue繼續(xù)循環(huán)用法總結(jié)

    本篇文章給大家總結(jié)了關(guān)于Python continue繼續(xù)循環(huán)的相關(guān)知識點以及用法,有需要的朋友跟著學(xué)習(xí)下吧。
    2018-06-06
  • 使用numpy.ndarray添加元素

    使用numpy.ndarray添加元素

    這篇文章主要介紹了使用numpy.ndarray添加元素,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 學(xué)習(xí)python的幾條建議分享

    學(xué)習(xí)python的幾條建議分享

    熟悉python語言,以及學(xué)會python的編碼方式。熟悉python庫,遇到開發(fā)任務(wù)的時候知道如何去找對應(yīng)的模塊。知道如何查找和獲取第三方的python庫,以應(yīng)付開發(fā)任務(wù)
    2013-02-02
  • Python實現(xiàn)KNN鄰近算法

    Python實現(xiàn)KNN鄰近算法

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)KNN鄰近算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Pandas 多層索引操作的實現(xiàn)

    Pandas 多層索引操作的實現(xiàn)

    本文主要介紹了Pandas 多層索引操作的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 在Python中COM口的調(diào)用方法

    在Python中COM口的調(diào)用方法

    今天小編就為大家分享一篇在Python中COM口的調(diào)用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python 實現(xiàn)淘寶秒殺的示例代碼

    Python 實現(xiàn)淘寶秒殺的示例代碼

    本篇文章主要介紹了Python 實現(xiàn)淘寶秒殺的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

京山县| 宁南县| 潮州市| 富民县| 上高县| 筠连县| 西城区| 麻江县| 桃园市| 永德县| 忻城县| 绥中县| 阿勒泰市| 镇宁| 和田市| 江北区| 绥芬河市| 温宿县| 明水县| 格尔木市| 鹤壁市| 大荔县| 虞城县| 崇阳县| 镇坪县| 昌图县| 安阳市| 郓城县| 柘荣县| 淄博市| 郧西县| 信宜市| 南通市| 沙坪坝区| 喜德县| 泌阳县| 托克逊县| 萨嘎县| 宜昌市| 抚松县| 营山县|