Python言語反射の私見


コンピュータ科学において、反射(英語:reflection)とは、コンピュータプログラムが実行時にそれ自体の状態や動作にアクセス、検出、修正できる能力を指す.[1]比喩的に言えば、反射はプログラムが実行されている間に「観察」し、自分の行為を修正することができることである.
反射技術は一般的にフレームワークの中で非常に多く使われています.例えば、各種WEBフレームDjangoなどです.
前の例に直結しましょう
class Person(object):
    grade = 10

    def __init__(self):
        pass

    def info(self):
        print('  person  info  ')

# getattr()              
inst = Person()
func = getattr(inst, 'info')
func()

# hasattr()                    
print(hasattr(inst, 'info'))
print(hasattr(inst, 'grade'))

# setattr()                
setattr(inst, 'name', 'moddemod')
r = hasattr(inst, 'name')
print(r)
name = getattr(inst, 'name')
print(name)

# delattr()              
delattr(inst, 'name')
print(hasattr(inst, 'name'))

ここでは主に文字列を入力したものを理解していますが、結果は確実なコードの実行結果を返します.
すなわち文字列->実行コードというマッピング
反射はこのような表現です
理解しにくいかもしれませんが、通常、Pythonは解釈型の動的言語ですが、CPUで実行するときは必ずハードコーディング、いわゆるバイナリで、私たちが書いたコード部分については、最上層部からアルファベット数字の様々な変数関数を見ていますが、CPUにはこれらのものはありません.
本来、私たちがコードを書くとき、通常、1つの関数は定義してから呼び出す必要があり、呼び出しを定義するプロセスはコードの部分で書かれています.
#   
def func():
	print('call...')

#   
func()

しかし、反射メカニズムにより、プログラムの実行時に文字列「func」を入力することができ、funcという関数オブジェクトを取得することができ、さらにこの関数を呼び出すことができる.
ここで得られた属性については,関数であれば直接呼び出すことができ,動的言語にかかわるアヒルのタイプである.
「鳥がアヒルのように歩き、アヒルのように泳ぎ、アヒルのように鳴くのを見ると、この鳥はアヒルと呼ぶことができます.」アヒルのタイプとは
アヒルのタイプ(英語:duck typing)はプログラム設計においてダイナミックなタイプのスタイルである.
アヒルのタイプでは、対象の行為に注目し、何ができるかに注目します.オブジェクトが属するタイプではありません.
アヒルのタイプは、通常、「いいえ」テスト方法と関数のパラメータのタイプのおかげで、ドキュメント、明確なコード、テストに依存して正しく使用されます.
簡単に言えば、普通の属性を手に入れて直接呼び出すこともできます.Pythonの文法も間違っていませんが、実行中は通れないに違いありません.それはあなたが何なのか(文法は間違っていない)を気にしないで、あなたが何ができるかを気にします(実行は間違っています.あなたはこのことができないからです).