公式ドキュメント
Called to implement evaluation of self[key].
なるほど。オブジェクトに対して角括弧でkeyを指定したときの挙動を実装できるらしい。
用例
少し調べてみたがあまり良い例が見つからなかった。ところでPythonでは時々インスタンスのプロパティに動的にアクセスしたくなる時がある。
例えば以下のようなUserクラスに対して
import dataclasses
class User():
age: int = 20
以下のようにプロパティageにアクセスしたいのだけれど
user.age
このageというプロパティ名自体を変数として表現したい場合だ。そのような場合はgetattrを用いると良い。
var = 'age'
getattr(user, var)
getattrについては本記事の本題から逸れるが以下の記事がわかりやすい。
ただ、アクセスのたびに毎回getattrという特殊メソッドを呼び出したくはないので、何らかの形でクラスの実装として組み込みたい。つまり
user[var]
のようなアクセスができるようにしたい。ここで、角括弧でkeyを指定したときの挙動を定義したくなったので、__getitem__をうまく活用してみよう。
class User():
age: int = 20
def __getitem__(self, item):
return getattr(self, item)
これで
user = User()
var = 'age'
user[var]
のようなアクセスができるようになった。