LoginSignup
3
1

More than 1 year has passed since last update.

イントロスペクションについて(オブジェクトの調査)

Last updated at Posted at 2021-09-18

pythonの本を読んでいたら、イントロスペクションという単語が急に出てきたので、ネットで調べたものをまとました。

イントロスペクションの意味

英語ではintrospectionと書かれ、日本語で「内省」と訳されます。あまり生活にはなじみのない単語ですが、辞書を引いてみると内省は「自分自身の思考や振る舞いについて深く考えること」と書かれています。

プログラミング言語においてのintrospectionは、プログラムの実行時にオブジェクトの性質や型を調べることです。
プログラミング言語で書かれたオブジェクトについて内省することだと私は解釈しています。
イントロスペクションは多くのプログラミング言語に実装されています。

リフレクション(reflection)との違い

似たような意味としてリフレクションが存在します。
リフレクションは、プログラムの実行時にオブジェクトの値、メタデータ、性質、関数を操作することです

例(python)

pythonは全てがオブジェクトなので、イントロスペクション機能を持つ関数を使うことで多くの事を調べることができます。
イントロスペクション機能を持つ関数の中で最も強力なのがdir()です。

class Sample():
    def __init__(self, number):
        self.value = number
    def tenfold(self):
        return self.value * 10
a = Sample(10)
print(dir(a))
出力.py
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
 '__str__', '__subclasshook__', '__weakref__', 'tenfold', 'value']
#dir()はオブジェクトの有効な属性のリストを返した

またdir()の他にも、type()やisinstance()はそのオブジェクトの型が何なのか調べることができ、hasattr()はオブジェクトの属性を調べることができます。
よって、上に挙げた関数もイントロスペクションの機能を持つ関数であると言えます。

文献(これを見た方が速い)

Pythonで最も役立つ5つのイントロスペクション関数
使用しているタイプについて詳しく知るための関数
https://ichi.pro/python-de-mottomo-yakudatsu-5-tsu-no-intorosupekushon-kansu-123716058980097
Python / 内省的(introspective)とはどういうことか
https://hanepjiv.blogspot.com/2014/11/python-introspective.html
https://en.wikipedia.org/wiki/Type_introspection

最後に

始めて投稿したので、指摘などがあれば遠慮なくしてください。
この記事に反応があればさらに追記したいと思います

3
1
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
1