私はdata = [[t1, t2, ...], [v1, v2, ...]]
のようなデータを持っています。私はdata[0]
の代わりにdata.t
と呼ぶことができるので、これをクラスにまとめたいと思います。*引数アンパック演算子をオーバーロードする方法は?
私は次のようにこれを実行しようとしました:
class Variable:
def __init__(self, data):
self.t = data[0]
self.v = data[1]
def __getitem__(self, key):
if key == 0:
return self.t
elif key == 1:
return self.v
else:
raise ValueError("not valid key '{}'".format(key))
def __setitem__(self, key, value):
if key == 0:
self.t = value
elif key == 1:
self.v = value
else:
raise ValueError("not valid key '{}'".format(key))
data[0]
はまだ動作するよう__getitem__
と__setitem__
オーバーロード理由は後方compabilityのためです。これは、ほとんどのもののために働く、しかし私は、次の呼び出しの問題に実行する:
func_that_takes_two_arguments(*data) # unpacking data
私が手にエラーが
私は引数を開梱作業を適切に私のクラスの仕事をすることができますどのように/Users/pingul/Workspace/lhcfill/oml.py in __getitem__(self, key)
52 return self.val
53 else:
---> 54 raise ValueError("not valid key '{}'".format(key))
55
56 def __setitem__(self, key, value):
ValueError: not valid key '2'
のですか?
あなたは '*'をオーバーロードしていないので、オブジェクトを反復するだけです。 'ValueError'ではなく、IndexErrorを呼び出す必要があります。 – jonrsharpe