多態性
是允許將父物件設定成為和一個或多個它的子物件相等的技術,比如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方法。