標籤:
同樣作為動態語言,python的面相對像和ruby有很多類似的地方,這裡還是推薦《Ruby元編程》一書來參考學習python的物件導向。然而python並不是純物件導向設計,所以很多ruby種靈活的技巧在python中可能並不適用,但是這並不影響該書對python物件導向學習的借鑒意義。
從類和執行個體開始,談python2到python3
類和執行個體是物件導向的基礎,類是一個對象的定義,比如人類定義了人應該有的基本屬性和方法,而執行個體則是真正的實物,執行個體中存放了對象的具體資訊,如小明是人類的一個執行個體,小明的身高體重等資訊構成小明這個對象的具體資訊。然而,類本省也是一個對象,新式類全都繼承自一個父類,object是所有類的祖先,是祖先類的最頂級建築,object這個類也是一個對象,python中,object的類不再稱為class,而是type,任何用class關鍵字定義的類,都是type的一個執行個體。
類可以通過class關鍵字來建立:
class MyNewObjectType(bases):
? ? ‘define MyNewObjectType class’
? ? class_suite
在python2中,這裡面其實一團糟,經典類:沒有繼承自其他類的類,是沒有__class__屬性的,通過type()方法,可以看到,經典類的類型是:<type ‘classobj’>;而新式類,即通過繼承其他類而來的類,其類型則是type,python曾近試圖將type和class統一,但是明顯在python2中,這些概念還是能夠困擾到一些人:
class Cls1:
? ? pass
print type(Cls1)
class Cls2(object):
? ? pass
print type(Cls2)
print Cls2.__class__
上述代碼結果為:
<type ‘classobj‘>
<type ‘type‘>
<type ‘type‘>
如果你沉迷於類似ruby那樣純物件導向的文法,python2或許會讓你受不了,這些遺留問題在python3中得以解決,使其對物件導向的支援更加優秀。
鑒於以上原因,在python物件導向的學習中,全部採用python3,python3由於很多對python2的不相容性受到質疑,但是至少朝著正確的方向發展,如果不更改python2中遺留的一些問題,當python的庫越來越多的時候,難以避免會出現更多的問題,python3的升級同時也會講一些python2中劣質的庫做一次淘汰,優質的庫肯定在社區中會得到優先地移植,從語言本身來講,這未嘗不是一件好事情,可以讓python3擺脫掉很多的曆史包袱,並且具有更加優秀的文法,也讓我對其有更加好的預期。從python2到python3是一個重要的決定,他可能會讓python失去很多,甚至可能會讓python退出舞台,但是我仍然對其看好,相比java對擴充包的不聞不問,python3對自身做出的決絕的改革給python搭建了全新的舞台。
python3中的新特性
http://my.oschina.net/lenglingx/blog/205626
一些常用特性上文中都以提到
Python學習_10__python2到python3