克服共享類別資料問題
在物件導向程式設計中,最好保持每個實例的類別資料不同。然而,當類別資料在實例之間意外共享時,會出現一個常見問題,從而導致意外行為。
問題:
考慮以下程式碼:
class a: list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 2, 3, 4] print(y.list) # prints [1, 2, 3, 4]
在此範例中,類別 a 的實例 x 和 y 共用相同的清單。因此,將元素追加到 x.list 也會將它們加入 y.list,這違反了預期行為。
解決方案:
為了防止共享類別數據,實例成員應該在單獨的實例方法而不是類別聲明中聲明。在 Python 中,__init__ 方法通常用於此目的。
class a: def __init__(self): self.list = []
透過在 __init__ 方法中初始化列表變量,a 的每個實例都將擁有自己獨立的列表副本。
預期行為:
透過此修改,預期行為可以是實現:
x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 3] print(y.list) # prints [2, 4]
使用這種方法分離類別資料可以保證每方法分離類別資料可以保證每方法個實例都有自己唯一的資料集,消除實例之間共享資料的問題。
以上是如何避免物件導向程式設計中的共享類別資料問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!