python中的多態

來源:互聯網
上載者:User
多態性

是允許將父物件設定成為和一個或多個它的子物件相等的技術,比如Parent:=Child; 多態性使得能夠利用同一類(基類)類型的指標來引用不同類的對象,以及根據所引用對象的不同,以不同的方式執行相同的操作.

c++中多態更容易理解的概念為

允許父類指標或名稱來引用子類對象,或對象方法,而實際調用的方法為對象的類類型方法。

--------------以上內容來自百度百科----------------


python不支援多態

python是一種動態語言,參數在傳入之前是無法確定參數類型的,看下面例子:

class A:    def prt(self):        print "A"class B(A):    def prt(self):        print "B"        class C(A):    def prt(self):        print "C"       class D(A):    passclass E:    def prt(self):        print "E"class F:    passdef test(arg):    arg.prt()a = A()b = B()c = C()d = D()e = E()f = F()test(a)test(b)test(c)test(d)test(e)test(f)

輸出結果:

A
B
C
A
E
Traceback (most recent call last):
  File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 33, in <module>
    test(a),test(b),test(c),test(d),test(e),test(f)
  File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 24, in test
    arg.prt()
AttributeError: F instance has no attribute 'prt'

乍一看似乎python支援多態,調用test(a),test(b),test(c),test(d)時工作的很好,但是下邊就大不一樣了。調用test(e)時,python只是調用e的prt方法,並沒有判斷e是否為A子類的對象(事實上,定義test方法時也沒有指定參數的類型,python根本無法判斷)。調用test(f)時報錯,原因很很簡單,f沒有prt方法。

相關文章

聯繫我們

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