リフレクション:マップや手順を変更し、プロパティ、メソッドを実行して、文字列の状態
三つの方法反射があります。
hasattr(オブジェクト、名)内のオブジェクト(物体)のプロパティの対応する文字列(名前)か否かを判断
GETATTRここ対応するメモリアドレスの文字列を取得する(オブジェクト、名)(名前)オブジェクト(物体) (すなわち、対応する取得方法)
SETATTR物体(オブジェクト)(名前)値(値)に属性を追加する(オブジェクト、名前、値)
delattr属性(オブジェクト名)を削除するオブジェクト
例:
DEF (自己)SLEEP: 印刷(' %のSスリープ'%self.name) DEF トーク(): 印刷(' 話' ) クラスの人々 (オブジェクト): セックス = ' M ' DEF __init__ (セルフ、名): セルフ.nameの = 名前は DEF (自己)EAT: 印刷(' %Sは食べている'%self.name) P =ピープル(' シンプル' ) を印刷(はhasattr(P、「食べる」)) #は、真の#は、プロパティpがこのオブジェクトを食べるかどうかを決定返します。 プリント(はhasattr(P、' 名称')) #はTrueを返し (P F = GETATTRを' 食べる') #、食べる取得したメモリアドレス、すなわち、食べる方法得る 印刷(F) #1 食べるプリントのメモリアドレスを 印刷(F( )) #のプリント食べすなわち、メソッドを実行し、戻り値を食べる #可変動作を STR = INPUT(' :変数' ).strip() ヴァル = INPUT(' 変数の値:' ).strip() IFはhasattr(P、 STR): #P内のstr変数があるかどうか、strのユーザパラメータが渡されました。その場合は、次の操作を行います。 FUNC = GETATTR(P、STR) #Pを得、STRバリアブル 印刷(' 元の変数:%S =%S '%(STR、FUNC)) SETATTR(P、FUNC、ヴァル) #値pを変更し、STR変数 F = GETATTR(P、FUNC) #の再取得のp、strの変数 を印刷(' に修正される変数:%S =%S '%(STR、ヴァル)) #の印刷STRの値が 他: #1 strがPには存在しません。変数は、次の手順を実行します。 SETATTR(P、STR、ヴァル) #変数strのpを追加すると、割り当てヴァル- >ヴァルSTR = GV = GETATTR(P、STR) #取得strの変数pが新たに追加された 印刷("新しい変数:%S =%S '%(STR、GV)) #の列str変数印刷新しく追加された値 delattr(P-、STR) #は、変数の削除 印刷は、(' 変数を削除します:%S "%strを) #を削除しますpは変数のstrである 印刷(' :%S変数Sがあるかどうか%'%(STR、はhasattr(P、STR))) #削除後、次にプロパティが存在するか否かを判断します
結果:
DEF (自己)SLEEP: 印刷(' %のSスリープ'%self.name) DEF トーク(): 印刷(' 話' ) クラスの人々 (オブジェクト): セックス = ' M ' DEF __init__ (セルフ、名): セルフ.nameの = 名前は DEF (自己)EAT: 印刷(' %Sは食べている'%self.name) P =ピープル(' シンプル' ) を印刷(はhasattr(P、「食べる」)) #は、真の#は、プロパティpがこのオブジェクトを食べるかどうかを決定返します。 プリント(はhasattr(P、' 名称')) #はTrueを返し (P F = GETATTRを' 食べる') #、食べる取得したメモリアドレス、すなわち、食べる方法得る 印刷(F) #1 食べるプリントのメモリアドレスを 印刷(F( )) #のプリント食べすなわち、メソッドを実行し、戻り値を食べる #の動作方法を STR = INPUT(' メソッド:' ).strip() 場合はhasattr(P、STR): #Pの存在下におけるSTR法は、ユーザーSTRであるか否か入ってくるパラメータ。その場合は、次の操作を行います。 = GETATTR FUNC(P、STR) #Pを得る方法は、STR 印刷(' %sののメソッドの結果:'%(STR)、終了= '' ) FUNC()# を実行する方法 他を: #1 strの方法は、以下の操作を行い、Pに存在します。 #のPにSETATTR(P、STR、SLEEP)#は、自己のパラメータと、クラスメソッドの睡眠を追加 SETATTR(P、STR、の話) #なし自己引数で、p個の話を添加する方法に #1 SLEEP = GETATTR(P、STR)# Pを求める方法STR新たに追加されたメモリ・アドレス・ トーク= GETATTR(pは、STR) プリント(' 新しい方法:%sは、結果を返す:'%のSTR) #の新たに追加された印刷のSTR変数値 #1 SLEEP(p)を自己と#クラスのメソッド呼び出し の話() #自己せずに通常のメソッド呼び出し、 delattr(P、STR) #の削除方法の 印刷(' メソッドを削除します:%S '%文字列) #を削除pはstrの変数である 印刷(' :%S変数%Sがあるかどうか'%(STR、はhasattr(P、STR ))) #削除した後、次いで性があるかどうかを決定します
結果: