検索ワードが思いつかず苦労しました。アンパックというのですね。
foo, bar = (100, 200)
みたいなやつ。
例えばこんなクラスがあったとします
class _Node: def __init__(self, x=0.0, y=0.0): self._v = np.array( (x, y, 1) ) @property def x(self): return self._v[0] @x.setter def x(self, v): self._v[0] = v @property def y(self): return self._v[1] @y.setter def y(self, v): self._v[1] = v
numpy.arrayを隠蔽して、簡単に行列とかかけられつつ 普段は感覚的に.x, .yとかで位置を変更できるという感じの。
こいつにこれをやっていました
n = Node() n.x, n.y = (100, 101)
これをやるとダメ。
python2ではインスタンスnのプロパティにアンパックではなく、同名のxやyという属性が作成されてしまい、内部値は二重に存在している状態で、二度とプロパティでアクセスできなくなるのでございました。
なおpython3では普通に動くのでありました
ってこの話、遠い昔に見たような気がしなくもなく…(^^;
また一つpython3に乗り換える理由が増えた気がします