91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Python中classmethod和staticmethod有什么區別

發布時間:2020-08-26 17:28:22 來源:億速云 閱讀:223 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Python中classmethod和staticmethod有什么區別,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

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

1. 定義方式

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

self和cls的區別不是強制的,只是PEP8中一種編程風格,slef通常用作實例方法的第一參數,cls通常用作類方法的第一參數。即通過self來傳遞當前類對象的實例,cls傳遞當前類對象。

2. 綁定對象

foo方法綁定對象A的實例
print(a.foo)
<bound method A.foo of <__main__.A object at 0x100721cf8>>
class_foo方法綁定對象A
print(a.class_foo)
<bound method A.class_foo of <class '__main__.A'>>
static_foo沒有參數綁定。
print(a.static_foo)
<function A.static_foo at 0x100727730>

3. 調用的方式

foo可通過實例a調用,類對象A直接調用會參數錯誤。

print(a.foo(1))
調用foo函數 (<__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 <module>
    print(A.foo(1))
TypeError: foo() missing 1 required positional argument: 'x'

class_foo可通過類對象A 或對象實例a調用。

a.class_foo(2)
A.class_foo(2)
調用class_foo函數 (<class '__main__.A'>, 2)
cls: <class '__main__.A'>

static_foo可通過類對象A 或對象實例a調用。

a = A()
a.static_foo(3)
A.static_foo(3)
調用static_foo函數 (3)

4. 繼承與覆蓋普通類函數一樣。

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

運行結果:

調用foo函數 (<__main__.B object at 0x10246a2b0>, 1)
self: <__main__.B object at 0x10246a2b0>
調用class_foo函數 (<class '__main__.B'>, 1)
cls: <class '__main__.B'>
調用static_foo函數 (1)

關于Python中classmethod和staticmethod有什么區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

玉树县| 新邵县| 奈曼旗| 石家庄市| 宜州市| 宣化县| 田东县| 重庆市| 德惠市| 高碑店市| 辽阳市| 香港| 达拉特旗| 运城市| 和田县| 阿瓦提县| 治县。| 巨野县| 内丘县| 浦县| 南康市| 南宫市| 泰顺县| 余庆县| 治多县| 龙陵县| 东乌珠穆沁旗| 岳普湖县| 定安县| 桃源县| 康平县| 故城县| 潼南县| 容城县| 云安县| 泰来县| 广平县| 常宁市| 玉树县| 白城市| 遵义市|