Python——反射

1166 ワード

Pythonでの反射
Pythonでは反射やjavaなどの言語の形が違います。
くりを一つあげる
class Foo:
    class_file = '123'
    def __init__(self,name,age):
        self.name = name
        self.age = age
    

obj = Foo('testname',22)
b = 'name'
上のプログラムでは、一つのクラスを作成し、二つの変数nameとageを受信して、Fooのオブジェクトを作成しました。「testname」と22をカプセル化しました。今は属性フィールドが「name」であることを知っています。オブジェクトの中のnameフィールドに対応する属性を直接取得する方法がありますか?
  • は、dictが内蔵方法であることをdictによって知っています。この方法は、クラス定義されたすべてのフィールドを辞書で返します。
  • print(obj.__dict__['name'])
    
  • getattr()取得属性
  • getattr(obj,name)は、あるオブジェクトから属性を取得するために、このオブジェクトはクラスオブジェクトであっても良いし、モジュールであっても良いし、pであっても良い。
    print(getattr(obj, b)) #     
    #     
    print(getattr(obj, b))
    func = getattr(obj,'show')
    r = func()
    #      
    print(getattr(Foo, 'class_file'))
    
    
  • hasattrは、あるフィールド
  • があるかどうかを反射的に判断する。
    print(hasattr(obj, b))
    
  • setattrは、反射によりある属性
  • を設定する。
    setattr(obj,b,'hello')
    print(obj.show())
    >>> hello-22
    
  • delattrは、反射によって属性
  • を削除する。
    delattr(obj,b)
    print(obj.show()) #      name