python 類進階文法 靜態方法

來源:互聯網
上載者:User

標籤:required   直接   error   span   ace   關係   user   foo   soft   

 

 

 

通過@staticmethod裝飾器即可把其裝飾的方法變為一個靜態方法,什麼是靜態方法呢?其實不難理解,普通的方法,可以在執行個體化後直接調用,並且在方法裡可以通過self.調用執行個體變數或類變數,但靜態方法是不可以訪問執行個體變數或類變數的,一個不能訪問執行個體變數和類變數的方法,其實相當於跟類本身已經沒什麼關係了,它與類唯一的關聯就是需要通過類名來調用這個方法

class dog(object):    def __init__(self,name):        self.name = name    @staticmethod # 實際上跟類沒什麼關係    def eat(self,):        print("%s is eating %s" % (‘ddd‘, ‘dd‘))d = dog("jianlin")d.eat()

上面的代碼執行 會出現錯誤

說是eat需要一個self參數,但調用時卻沒有傳遞,沒錯,當eat變成靜態方法後,再通過執行個體調用時就不會自動把執行個體本身當作一個參數傳給self了。

 

Traceback (most recent call last):  File "C:/Users/Administrator.QH-20170325TNQR/PycharmProjects/SSSSS/SS/day7/靜態方法1.py", line 17, in <module>    d.eat()TypeError: eat() missing 1 required positional argument: ‘self‘

變成靜態方法後,與類沒有什麼關係了,相當於一個單獨的函數 只是類下一個函數

 

想讓上面的代碼可以正常工作有兩種辦法

1. 調用時主動傳遞執行個體本身給eat方法,即d.eat(d) 

2. 在eat方法中去掉self參數,但這也意味著,在eat中不能通過self.調用執行個體中的其它變數了

 

方法一

class dog(object):    def __init__(self,name):        self.name = name    @staticmethod # 實際上跟類沒什麼關係    def eat():        print("%s is eating %s" % (‘mike‘,‘包子‘))d = dog("jianlin")d.eat()# mike is eating 包子

方法二

class dog(object):    def __init__(self,name):        self.name = name    @staticmethod # 實際上跟類沒什麼關係    def eat(self,):        print("%s is eating %s" % (self.name, ‘包子‘))d = dog("jianlin")d.eat(d)# jianlin is eating 包子

 

最好用類調用靜態方法 省記憶體

class Foo(object):    # 最好用類調用靜態方法 省記憶體    @staticmethod    def f1(args1, args2):        print(args1, args2)Foo.f1(123, 345)   # 類調用靜態方法 執行# 123 345

 

 

 

python 類進階文法 靜態方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.