3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonの特殊メソッド__getitem__の用例

Posted at

公式ドキュメント

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]

のようなアクセスができるようになった。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?