5

のようなデータがありますdata = [[t1, t2, ...], [v1, v2, ...]]。これをクラスにラップして、data.tを使用する代わりに呼び出すことができるようにしますdata[0]

私は次のようにしてこれをやろうとしました:

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))

__getitem__andのオーバーロードの理由__setitem__は、下位互換性のためであり、data[0]それでも機能します。これはほとんどの場合に機能しますが、次の呼び出しで問題が発生します。

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'

引数のアンパック演算子を使用してクラスを適切に機能させるにはどうすればよいですか?

4

1 に答える 1