C++程式員學Python:Python裡面的物件導向

來源:互聯網
上載者:User

python裡面也引入了物件導向的方法,除了一些C++的基本概念,還有其他一些不同,例如python的類有時候可以作為一個命名空間

1 class MyData(object):2     pass

python的繼承文法是class class_name(parent_class_name),所以上面的MyData對象繼承與object對象,至於object對象,則是python的內建對象,暫且不談

 

上面的就是聲明了一個空類,但是和C++不同的是,這個類本身可以當作一個命名空間使用,例如:

1 mathObj = MyData()2 mathObj.x = 43 mathObj.y = 54 mathObj.x + mathObj.y

 

這個時候mathObj更多隻是作為一個命名空間使用

當我們需要定義一個成員函數的時候:

1 class MyData(object):2     def printFoo(self):3         print "you invoked printFoo()"4     def printFoo2():5         print "you invoked printFoo2()"

printFoo2的定義是錯誤的,調用成員函數printFoo2的時候,解譯器會報錯,因為他定義形參self,self就是C++裡面的this,不過C++在我們定義成員函數的時候,會自動幫我們產生,不用像python這樣手動產生(還是我不知道??),我們調用一個成員函數,python和C++也都會自動幫我們傳遞類對象,所以當我們調用printFoo2的時候,解譯器幫我們傳遞self對象,但是printFoo2並沒有定義這個形參

 

當然,python裡面的類也有建構函式和解構函式,與C++不同的是,python的建構函式是__init__,解構函式是__del__

1 class MyData(object):2     def __init__(self):3         print "init"4     def __del__(self):5         print "del"
 
1 obj = MyData()2 init3 obj = 24 del

當我們建立obj的時候,會調用__init__函數,當把obj指向其他的資料的時候,python啟動記憶體回收機制,Mydata對象被刪除了,同時也調用了__del__函數

 

python還有一個比較注意的,就是建立類的時候會有一個同名的執行個體,例如我們有如下的類:

1 class C(object):2     foo = 100

如果我們輸入print C.foo,那麼解譯器會輸出100,如果我們輸入C.foo = C.foo+1,那麼C.foo會變成101,這時候如果我們b = C(),那麼print b.foo會發現輸出的是101,這是因為foo在這裡實際上是一個靜態變數,類似於C++在類裡面定義了一個static int foo

但是如果我們的C裡面定義了一個function,我們調用C.function()會怎麼樣,會報錯,這點跟foo不同,這個是因為function還沒有和一個類去綁定

 

在C++裡面如果我們需要拿到一個類的資訊,可以利用typeof,而python裡面也有類似的功能,不過需要類繼承自object

有如下的:

__name__:類名

__doc__:類的文檔

__bases__:所有父類構成的元組

__dict__:類的屬性

__module__:類所在的模組

__class__:對應的類

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.