真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中classmethod和staticmethod有什么區(qū)別

這篇文章將為大家詳細(xì)講解有關(guān)Python中classmethod和staticmethod有什么區(qū)別,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)建站主營(yíng)虎丘網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),虎丘h5微信小程序開發(fā)搭建,虎丘網(wǎng)站營(yíng)銷推廣歡迎虎丘等地區(qū)企業(yè)咨詢

python中3種方式定義類方法,常規(guī)方式、@classmethod修飾方式、@staticmethod修飾方式。

class A(object):
    def foo(self, x):
        print('調(diào)用foo函數(shù) (%s, %s)'%(self, x))
        print('self:', self)
    @classmethod
    def class_foo(cls, x):
        print('調(diào)用class_foo函數(shù) (%s, %s)' % (cls, x))
        print('cls:', cls)
    @staticmethod
    def static_foo(x):
        print('調(diào)用static_foo函數(shù) (%s)' % (x))
a = A()

1. 定義方式

普通foo()函數(shù)需要self參數(shù)隱式的傳遞當(dāng)前類對(duì)象的實(shí)例。@classmethod修飾的方法class_foo()需要通過(guò)cls參數(shù)傳遞當(dāng)前類對(duì)象。@staticmethod修飾的方法定義與普通函數(shù)是一樣的。

self和cls的區(qū)別不是強(qiáng)制的,只是PEP8中一種編程風(fēng)格,slef通常用作實(shí)例方法的第一參數(shù),cls通常用作類方法的第一參數(shù)。即通過(guò)self來(lái)傳遞當(dāng)前類對(duì)象的實(shí)例,cls傳遞當(dāng)前類對(duì)象。

2. 綁定對(duì)象

foo方法綁定對(duì)象A的實(shí)例
print(a.foo)
>
class_foo方法綁定對(duì)象A
print(a.class_foo)
>
static_foo沒(méi)有參數(shù)綁定。
print(a.static_foo)

3. 調(diào)用的方式

foo可通過(guò)實(shí)例a調(diào)用,類對(duì)象A直接調(diào)用會(huì)參數(shù)錯(cuò)誤。

print(a.foo(1))
調(diào)用foo函數(shù) (<__main__.A object at 0x10245ccf8>, 1)
self: <__main__.A object at 0x10245ccf8>
print(A.foo(1))
Traceback (most recent call last):
  File "/Users/liuhuiling/Desktop/MT_code/OPUnittest/case/demo.py", line 63, in 
    print(A.foo(1))
TypeError: foo() missing 1 required positional argument: 'x'

class_foo可通過(guò)類對(duì)象A 或?qū)ο髮?shí)例a調(diào)用。

a.class_foo(2)
A.class_foo(2)
調(diào)用class_foo函數(shù) (, 2)
cls: 

static_foo可通過(guò)類對(duì)象A 或?qū)ο髮?shí)例a調(diào)用。

a = A()
a.static_foo(3)
A.static_foo(3)
調(diào)用static_foo函數(shù) (3)

4. 繼承與覆蓋普通類函數(shù)一樣。

class C(A):
    pass
c = C()
c.foo(1)
c.class_foo(1)
c.static_foo(1)

運(yùn)行結(jié)果:

調(diào)用foo函數(shù) (<__main__.B object at 0x10246a2b0>, 1)
self: <__main__.B object at 0x10246a2b0>
調(diào)用class_foo函數(shù) (, 1)
cls: 
調(diào)用static_foo函數(shù) (1)

關(guān)于Python中classmethod和staticmethod有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前標(biāo)題:Python中classmethod和staticmethod有什么區(qū)別
本文路徑:http://weahome.cn/article/goiegj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部