Python——反射
1166 ワード
Pythonでの反射
Pythonでは反射やjavaなどの言語の形が違います。
くりを一つあげるは、dictが内蔵方法であることをdictによって知っています。この方法は、クラス定義されたすべてのフィールドを辞書で返します。 getattr()取得属性 getattr(obj,name)は、あるオブジェクトから属性を取得するために、このオブジェクトはクラスオブジェクトであっても良いし、モジュールであっても良いし、pであっても良い。 hasattrは、あるフィールド があるかどうかを反射的に判断する。 setattrは、反射によりある属性 を設定する。 delattrは、反射によって属性 を削除する。
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フィールドに対応する属性を直接取得する方法がありますか?print(obj.__dict__['name'])
print(getattr(obj, b)) #
#
print(getattr(obj, b))
func = getattr(obj,'show')
r = func()
#
print(getattr(Foo, 'class_file'))
print(hasattr(obj, b))
setattr(obj,b,'hello')
print(obj.show())
>>> hello-22
delattr(obj,b)
print(obj.show()) # name