Python自省及び反射原理例の詳細


Pythonの中の自省と反射
Pythonは強いタイプの動的解釈型言語であるため、オブジェクトの中にある属性と方法を知ることができない場合があります。
この時は私達は直接通すことができません。または下の階の_u uを見ます。dict_.このオブジェクトの属性と方法を得るためには、より文明的な方法を使用して、オブジェクトの属性と方法を取得する必要がありますので、この文明の方法は反射と呼ばれています。
自省と反射は専門的な用語で、まず自省は対象を取得する能力であり、反射は対象を操作する能力である。
Pythonではdelattr()とsetattr()を使って反射を実現しますが、他の方法は自省します。
反射と自省はよく組み合わせて使います。
Pythonにおける反射と自省に関する部分方法 
一般的な方法
dir()
オブジェクトを格納すると、リストを返します。 . の属性と方法があります。
hasattr()
オブジェクトの属性や方法を確認して、TrueまたはFalseを返します。
getattr()
オブジェクトの属性または方法を取得します。取得対象に該当する属性や方法がない場合は、デフォルト値を設定することができます。
setattr()
オブジェクトの属性の値を設定します。通常はオブジェクトの外部にある方法ではなく、オブジェクトのクラスに設定します。
delattr()
オブジェクトの属性または方法を削除します。
その他のいくつかの方法 
help()
オブジェクトのヘルプ情報を取得します。注意してください。戻り値なし!内部ではprint()を呼び出して印刷を行います。
issubclass()
一つのクラスが別のクラスのサブクラスであるかどうかを判断します。
isinstance()
オブジェクトが既知のタイプかどうかを判断します。
id()
記憶対象のメモリアドレス番号を返します。
ケーブル
オブジェクトの呼び出しが可能かどうかを判断します。
注意:すべての対象の原則において、私達は実例の対象を自己反省と反射するだけでなく、類の対象を自己反省と反射することもできます。
操作デモ
アプリケーションシーン

# ====                ,        ====

import sys

class DownloadAndUpload(object):

  def __init__(self):
    self.val = sys.argv[1]
    self.select()

  def download(self):
    print("    ...")

  def upload(self):
    print("    ...")

  def select(self):
    if hasattr(self,self.val):
      getattr(self,self.val)()
    else:
      print("     ")
DownloadAndUpload() 

拡張と後述:反射内部実現機構
実はこれを書くかどうか考えました。内部実現メカニズムです。これらの内容は二重の下に置いて法学が終わってから反射実現の内部メカニズムについて説明すべきです。だからここで一言言います。
  • hasattr():__ugetattribute_u uある場合は戻り、例外を捕まえてFalseに戻ります。
  • getattr():これはディスクリプタの後で説明するべきですが、実際にはまだ__udict_.操作を行います
  • setattr():内部_uを呼び出します。setattr対するdict_.操作を行います。Ps:例示的なオブジェクトの呼び出し時に、そのクラスとその親類を確認し、クラスのオブジェクトの呼び出し時に親または元を確認します。
  • delattr():コールバックdelattr_u対するdict_.操作を行います。Ps:例示的なオブジェクトの呼び出し時に、そのクラスとその親類を確認し、クラスのオブジェクトの呼び出し時に親または元を確認します。
  • 以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。