回答:
__getitem__
メソッドを使用する必要があります。
class MyClass:
def __getitem__(self, key):
return key * 2
myobj = MyClass()
myobj[3] #Output: 6
また、値を設定する場合は、__setitem__
メソッドも実装する必要があります。それ以外の場合は、次のようになります。
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
完全にオーバーロードするには、__setitem__
および__delitem__
メソッドを実装する必要もあります。
編集する
ほとんど忘れていました...リストを完全にエミュレートしたい場合は、も必要__getslice__, __setslice__ and __delslice__
です。
すべてがhttp://docs.python.org/reference/datamodel.htmlに文書化されています
__getitem__
メソッドを探しています。http://docs.python.org/reference/datamodel.htmlのセクション3.4.6を参照してください
__getslice__,
__setslice__`と__delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use
__getitem__.
__setitem__`と__delitem__' and test if the argument is of type
スライス, i.e.:
でisinstance(引数、スライス)の場合:...