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

首頁 > 編程 > Python > 正文

基于python中staticmethod和classmethod的區別(詳解)

2020-01-04 16:39:06
字體:
來源:轉載
供稿:網友

例子

class A(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  a=A()

上述類有三個函數,使用如下:

a.foo(1)# executing foo(<__main__.A object at 0xb7dbef0c>,1)-----------------------------------------------------------------a.class_foo(1)# executing class_foo(<class '__main__.A'>,1)A.class_foo(1)# executing class_foo(<class '__main__.A'>,1)-----------------------------------------------------------------a.static_foo(1)# executing static_foo(1)A.static_foo('hi')# executing static_foo(hi)

區別

• foo()的調用者必須是類A的一個實例,class_foo()與static_foo()的調用者既可以是類也可以是某個實例

• 參數不同,foo() 參數為self和其他參數,class_foo()參數使用類(cls)替換了self,static_foo()則只有參數,沒有self和類(cls)

• a.foo(1)中的foo()與a是綁定的,class_foo()是與類綁定的,而static_foo()與這兩者都沒有綁定,可以使用print來查看,如下:

```print(a.foo)# <bound method A.foo of <main.A object at 0xb7d52f0c>>print(a.class_foo)# <bound method type.class_foo of <class 'main.A'>>print A.class_foo<bound method classobj.class_foo of >print(a.static_foo)# print(A.static_foo)# ```

作用

• 使用場景:classmethod在一些工廠類的情況下使用較多,也就是說OOP里繼承的時候使用,staticmethod一般情況下可以替換為外部的函數,后者繼承的時候不可更改,和C++/JAVA中的靜態方法很相似

• 有利于組織代碼,同時有利于命名空間的整潔

以上這篇基于python中staticmethod和classmethod的區別(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。

 

注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安塞县| 青河县| 临桂县| 图木舒克市| 镇江市| 维西| 汝城县| 连南| 松江区| 南江县| 镇赉县| 即墨市| 大悟县| 玉山县| 泰和县| 福鼎市| 霸州市| 师宗县| 连平县| 扶风县| 宜兴市| 左贡县| 大冶市| 汾西县| 随州市| 临湘市| 枝江市| 遂溪县| 花垣县| 板桥市| 克拉玛依市| 石家庄市| 固原市| 江孜县| 象州县| 永靖县| 新乡县| 屏山县| 宝鸡市| 普宁市| 高密市|