---文字列の呼び出し関数と方法とpythonで反射

私たちは、実用的なアプリケーションで、このような場面に遭遇します:書かれたコードの後、我々は、コード命令は、直接関数やメソッドを呼び出して入力するように願って、いつもの練習を、私たちは、達成するためにif文を使用します、

a=input('<<<')
if a == 要输入的指令
代码块
elif a==要输入的指令
代码块
....

それは必要な時間が少ないと判断された場合、これは問題ありませんが、より多くの時間を決意コードを必要とし、コードが非常に長くなります。

その後、我々はすぐにこの機能を実現するためにリフレクションを使用することができます。

反射:データ型を操作変数、メソッド、関数などの文字列です。

一般的に使用される反射型の方法があります。

GETATTR()メソッドは、反射された取得します

hasattr()メソッドが一般的に、反射GETATTRと共に使用されているか否かを判定する

1)クラスに反映されます。オブジェクトのプロパティとメソッドのオブジェクト名によって得ることができる、あなたはまた、クラス名を持つ静的プロパティ、クラスメソッド、および静的メソッドを取得することができます。次のようにコードの形式は次のとおりです。

GETATTR(またはオブジェクトのクラス名、「プロパティ名」)

class A:
    def __init__(self,name):
        self.name=name
    def func(self):
        print('test')
a=A('apple')
print(a.name)
print(getattr(a,'name'))

上記のコード例、列7および8は、要件を実装することができるが、GETATTR()メソッドによって、我々は、次のコードにこのような人間とコンピュータの相互作用INPUT()で達成することができます。

class A:
    def __init__(self,name):
        self.name=name
    def func(self):
        print('test')
a=A('apple')
b=input('<<<')
print(getattr(a,b))

私たちは、ビューにプロパティを入力することにより、人間とコンピュータの相互作用、することができます

クラスメソッドが呼び出される場合は、括弧をコールバックする必要があるので、反射発生したメモリアドレスの後に次のコード、Cを使用することができます

c=getattr(a,'func') 
c()

---------------------------------------分割ライン--------- ---------------------------

次のようにモジュールに反映され、原理は同じコードの形式です。

GETATTR(モジュール名、 "機能")

例えば、我々は時間のモジュールに次のコードをテストすることができます。

import time
a=getattr(time,'localtime')
c=time.strftime('%Y-%m-%d',a())
print(c)

上記のコードは、と等価です

import time
c=time.strftime('%Y-%m-%d',time.localtime())
print(c)

コードの長さは同じに見えますが、前者は複雑な意思決定を必要とせずに、ヒューマン・マシン・インタラクションで達成することができます

---------------------------------------分割ライン--------- ---------------------------

上記のコードは、要件を満たすために、しかし、リスクは入力文字列が見つからなかったら、私たちは一緒に使用される別の方法を使用する必要があるので、それは、エラーになります、ありますが、はhasattr()で、その役割は、マスターの存在を決定することです我々は方法を変更しない二行目を修正する場合、文字列は、コードの下で、呼び出すことができます

import time
a=getattr(time,'localtime1')
c=time.strftime('%Y-%m-%d',a())
print(c)

次のエラーが発生し
ここに画像を挿入説明
、その後、我々は次のようにはhasattr裁判官はまた、迅速なエラーを設計することができます使用することができます。

import time
if hasattr(time,'localtime1'):
    a=getattr(time,'localtime1')
    c=time.strftime('%Y-%m-%d',a())
    print(c)
else:
    print('代码错误')

結果は以下の通りである:
ここに画像を挿入説明
次のように要約します:

1)我々は、入力文字列を使用してこのような入力のようないくつかの対話又は対話データを、必要なときにファイルから読み取られ、またはメソッド呼び出しを実装するためにいくつかの機能は、反射法を使用して実施することができます。

2)反射法は、if文も達成することができるが、よりニーズ反射法がより簡単であるから判断、達成することができます

3)セキュリティが高くなりますので、内部反射は、コードと呼ばれ、実行されるので!

公開された13元の記事 ウォンの賞賛1 ビュー190

おすすめ

転載: blog.csdn.net/aa12551827/article/details/104916397