演算 ++ を実現する

VDM++ での演算 ++ に準拠するように、メソッド VDM_Map.__add__ を実現します。

class VDM_Map:
def __add__(m1,m2):
"""
m1 ++ m2
; map A to B * map A to B -> map A to B
;
; Override
; overrides and merges m1 with m2, i.e. it is like a
; merge except that m1 and m2 need not be compat-
; ible; any common elements are mapped as by m2
; (so m2 overrides m1).
"""
return VDM_Map(m1._Override(m2))
def _Override(m1,m2):
m = {}
for k,v in m1.dict.items():
m[k] = v
for k,v in m2.dict.items():
m[k] = v
return m

メソッド __add__ では、演算子 + の動作を規定します。写像 m1 に m2 を上書きした写像を生成して、これをリターン値とします。メソッド _Override は、munion の補助関数です。まず、空の辞書 m を用意して、写像 m1 に含まれるすべての写像対を追加します。次に、写像 m2 に含まれるすべての写像対を追加します。

《Note》Python演算子 + には、次のメソッドが対応します。
__add__(self, other)
2項演算子 + を適用したときの動作を規定します。□