作者cryinrain (啞貓)
看板Python
標題[問題] 類別屬性參考到相同物件
時間Tue Sep 4 20:17:41 2018
看書時遇到一個問題沒辦法解釋,想請教各位先進
class Kangaroo:
def __init__(self, name, contents=[]):
self.name = name
self.pouch_contents = contents
為什麼這個類別在建立不同物件時,contents會參考到相同的串列?
我以為在每次建立物件時,各自物件的contents都會參考到一個新的串列
但事實上並不是,而書上提供的解法是:
class Kangaroo:
def __init__(self, name, contents=None):
self.name = name
if contents is None:
contents = []
self.pouch_contents = contents
為什麼這邊的contents = []就可以建立新的串列物件?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.70.217
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1536063464.A.921.html
推 TuCH: 寫在函式外的[] 是全域的[] 寫在fun裡的是區域的[] 09/04 20:22
→ cryinrain: 原來如此,非常感謝!! 09/04 20:45
→ s860134: 引數列的預設引數在 class 被讀取時就建立了 09/05 12:23
→ nekosgr93: 預設值陷阱,不知道是不是這個 09/06 03:45
推 Yshuan: Mutable arguments, 行為類似c++的static local 09/06 09:10
推 ckc1ark: default值藏在 Kangaroo.__init__.__defaults__ 09/06 15:45
→ ckc1ark: 所以沒傳contents就會從這拿 就會是同一個 09/06 15:47