2016年3月23日 星期三

[python] python 3.x 名稱,與動態型別解釋, 多型(Polymorphism)機制

[結論]: python 中任何東西都是物件(object)

[觀念一] 
型別(type)是放在物件(object)身上, 而不是加諸在變數名稱(name)身上 =>造成動態型別

在python 中

當你 a=5 時
他會先建立一個a
1.此時 , a 只是個名稱(name), 沒有任何型別的意義在裡面
接著
2.建立一個5的int 物件(object) , 再把a 指向 5這個type是int的物件 (這一步就叫做:綁定 binding)

由上面例子可以知道, 所以 變數名稱 a 跟 物件的型別(type) 完全沒有關係

a 先建立起來, 當時是沒有任何型別資訊的, 也就是說,

當你有一個 名稱(無論是a or b or xxx )在手上時, 他右邊是誰無所謂, 因為他之後隨時
可以被一直assign 給不同的右邊物件, 可能一下是int , 一下是list (稱為動態型別)

a=3
a=[1,2,3]

所以, 在python 中, 型別是放在 物件身上, 而不是加諸在名稱身上, 跟我們傳統的C 不同.
傳統的c 是 宣告變數名稱時, 就要指定型別.

ex:
int C ;

所以,在python
 一個名稱中,可以有不同的型別物件

a=['abc',5,4.33,[6,6],'string']


[觀念二]  由於動態型別的現象, 造成多型(Polymorphism)機制

當 a=a+b 時, 因為只有在"執行"時, 才知道真正a, b 是怎樣的型別,
他要去對應作不同的 + , 而有不同的機制, 我們稱為多型.

ex: 如果 a ,b 是 int, 那 + 就只是單純數學相加, 但如果 a b 是字串,
那加就會變成 字串相接.


[結論] 所以不管你命名了怎樣的名稱, 其實都是想要運作右邊的物件,因此得到
在python 中, 其實所有東西都是物件在互動, 名稱只算是個代言人而已.









沒有留言:

張貼留言