あるクラスの__getitem__
をそれと他のリストの同じインデックスにあるアイテムの合計にしたいと考えています。オーバーロードされた__getitem__別の引数を受け入れる
>>> class Test(list):
def __init__(self):
self.extend([1, 2, 3])
def __getitem__(self, index, other):
return self[index] + other[index]
>>> t = Test()
>>> t2 = [4, 5, 6]
はしかし、私の2回の試行は、エラーをもたらした:
>>> t[5, t2]
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
t[5, t2]
TypeError: __getitem__() missing 1 required positional argument: 'other'
>>> t.__getitem__(5, t2)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
t.__getitem__(5, t2)
File "<pyshell#17>", line 5, in __getitem__
return self[index] + other[index]
TypeError: __getitem__() missing 1 required positional argument: 'other'
は__getitem__
複数の引数を与えることが可能ですか?もしそうなら、どうですか?そうでない場合は、それをエミュレートする方法はありますか?
期待以上に多くの引数を取らないようにするには、明示的なインデックス作成をスキップして、シーケンスアンパックを使用してください: 'index、other = value'。高速です(Pythonは安価な 'tuple'パッキングとアンパック用に最適化されており、索引付けにはあまり適していません)。私はこれが奇妙なことに同意します...言い換えれば、私は混乱の危険があるので、反対することをお勧めします。 – ShadowRanger
@ShadowRanger投稿を編集しました。ありがとうございました! – MSeifert