国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳谷县| 丹凤县| 汉源县| 将乐县| 泰州市| 林西县| 壤塘县| 淳化县| 昔阳县| 新源县| 富顺县| 湘乡市| 马尔康县| 天峻县| 乐昌市| 南川市| 伊宁县| 白银市| 同心县| 桦甸市| 余干县| 蓬溪县| 六盘水市| 福海县| 久治县| 宜川县| 谷城县| 布拖县| 贡嘎县| 慈利县| 方正县| 嵊州市| 吴忠市| 嘉善县| 彭州市| 长武县| 横山县| 应城市| 长岛县| 错那县| 双峰县|