Prototypeパターン

概要

オブジェクトをコピーすることでオブジェクトを作る」です。

Pythonのビルトイン機能で実現できるため、その紹介に留めます。

例題

  • x、yのプロパティを持つ Point クラスをコピーします。

サンプルコード

import copy


def main():
    point1 = Point(2, 3)
    point2 = copy.deepcopy(point1)

    print("x", point1.x, point2.x)
    print("y", point1.y, point2.y)


class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y


if __name__ == "__main__":
    main()

サンプルコード – 結果

x 2 2 y 3 3

クラス図

省略

説明

copy.deepcopy(オブジェクト) でオブジェクトをコピーすることができます。

ちなみにですが、point1 = point2 の用に代入では エイリアスが作られるだけでコピーにはなりません。

main() 文を以下の用に改変することで検証してみました。

point1 = Point(2, 3)
point2 = point1
point1.x = 5
print(point1.x)  # => 5
print(point2.x)  # => 5

このように、変更していないはずのpoint2も値が変わってしまいます。

Pythonらしく書く

copy.deepcopy() で書くことにより、オブジェクトをコピーすることができます。

参考

実践Python3