在重构期间防止意外更改以复制/查看语义

时间:2016-12-09 01:46:07

标签: python python-3.x

我有class Board代表董事会,其上有一些部分。这些部分由namedtuple表示,并存储在属性_pieces中,该属性只是一个字典(其键是板上的位置,其值是片段)。

Board有一个方法get_rectangle,它应该在棋盘上的指定矩形中返回位置和片段的副本。它只是通过创建并返回一个具有适当过滤位置的新字典来实现。

很久以后,在重构过程中,片段从namedtuple变为class并变得可变。这会导致一个棘手的错误:从get_rectangle返回的字典不再是副本(它与棋盘共享碎片对象)。

当然,在发现此错误后,它很容易修复。但是有哪些技术可以避免这个问题呢?原设计有没有明显的问题?

1 个答案:

答案 0 :(得分:0)

当您复制字典时,您似乎正在复制对象的引用而不是对象本身。因为元组是不可变的,所以这可以避免修改原始的任何问题。您是否考虑过使用see here以避免此问题?