知人のpython:反射

 

リフレクション:マップや手順を変更し、プロパティ、メソッドを実行して、文字列の状態

三つの方法反射があります。

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 )))  削除した後、次いで性があるかどうかを決定します
操作方法

結果:

 

おすすめ

転載: www.cnblogs.com/simple-li/p/11423116.html