物件與類別變數

      在〈物件與類別變數〉中尚無留言

物件變數與類別變數

物件變數是存在於每個實例出來的物件之內, 比如實例出 p1, p2二隻神奇寶貝, p1 有自已的level, p2也有自已的level. 物件變數就如每個人的手, 你的手斷了, 不干我的事, 我的手依然在.

類別變數則是存在於類別之內, 每個物件共用的變數, 比如count, 為p1, p2共同擁有. 類別變數就好比太陽, 我的太陽跟你的太陽, 都是同一顆. 你的太陽被射下來了, 我的太陽也跟著沒了.

物件變數

請先注意下面程式碼藍色的地方,  self.name=name, 此行會建立name 物件變數, 而 p1.level=100 此行也是在建立 level物件變數, 二者都是物件變數.

也就是說, 物件變數不一定要在類別裏建立, 也可以在外部隨意的創建. 在外部創建物件變數, 大陸用語為動態綁定屬性. 此點跟Java/C#不一樣, 強型語言的物件變數, 一定要在類別裏先建好. 這是熟悉強型語言的人特別容易搞混的地方. 

那麼在類別裏建立物件變數, 跟在外部建立物件變數, 有什麼差別呢? 如果在外部建立 p1.w=50, 那麼p2是沒有 w 的. 也就是說, 在類別內建立的物件變數, 每個物件都會有. 但在外部建立的, 不一定每個物件都有, 都要足一的建立。

class Pokemon(object):
    def __init__(self, name):
        self.name=name
p1=Pokemon("Eve")
p1.level=100
print("%s的level : %d" % (p1.name, p1.level))

物件變數生成時機

在Java, C#等語言中, 物件變數定義在類別內, 所以只要一new出物件, 物件變數就存在了. 但在Python裏卻不一樣, 這也是熟強型語言的人易混亂的地方, 請看如下代碼

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *