Python的類變數和物件變數聲明解析

來源:互聯網
上載者:User

標籤:

  Python的類和C++一樣,也都是存在兩種類型的變數,類變數和物件變數!前者由類擁有,被所有對象共用,後者由每個對象專屬。這裡我主要想討論一下他們的聲明辦法。

 

  首先說的是物件變數:

    只要是聲明在類的語句塊中,且沒有"self."首碼的變數都是類變數,且類變數是被所有對象共用的。

  注意紅字部分,如果聲明在類的方法的語句塊中,那麼就是局部變數了!比如下面這個例子:

 1 #!/usr/bin/env python 2 # -* - coding: UTF-8 -* - 3 #Function: Use the class var 4  5 class Person: 6     cvar = 1 7     def sayHi(self): 8       fvar = 1 9 10 print Person.cvar11 print Person.fvar

  那個cvar就是屬於Python類的變數,而那個fvar就是方法sayHi()中的局部變數,第11條語句那裡就會報錯!

 

  接下來我們再來討論一下物件變數的聲明方法:

    在類的語句塊及其中方法的語句塊中聲明的以“self.”開頭的變數都是物件變數,由對象專屬!

  比如下面這個例子:

 1 #!/usr/bin/env python 2 # -* - coding: UTF-8 -* - 3 #Function: Use the object var 4  5 class Person: 6     def haveName(self): 7       self.name = ‘Michael‘ 8     def sayName(self): 9       print self.name10 11 def main():12     p = Person()13 14     p.haveName()15     p.sayName()16 17 main()

  這裡在haveName()方法中聲明了一個物件變數,然後再在sayName()方法中調用。然後主程式中就會輸出了!

  不過建議將物件變數聲明在__init__()方法中,因為對象一被建立的時候即會調用這個方法,否則的話,比如上面那個例子,如果我先調用sayName()的話,那麼就會出錯,說對象執行個體還沒有name這個屬性!

 

  最後還想說的一點的就是,Python中沒有private public這些關鍵字來標明類的變數或者方法的存取權限,但是可以通過在變數或者方法的前面加上"__"來表明這個成員是被類私人的,不能在外部調用,比如下面這個例子:

 1 #!/usr/bin/env python 2 # -* - coding: UTF-8 -* - 3 #Function: Use the private var and func 4  5 class Person: 6     __count = 0            #這個變數是私人資料成員,只能被類的方法訪問,是屬於類的 7     def get(self): 8       return Person.__count 9     def __pri(self):10       print ‘Yes‘11 12 p = Person()13 print p.get()14 15 p.__pri()16 print p.__count

  比如這裡的類變數__count就是類私人的,只能被類的函數成員調用(13行),而在類外面調用(16行)就是錯誤的!還有那個函數成員__pri()也是私人的,在類外面直接調用(15行),也是錯誤的!

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.