pythonの18日目(a)の学習に基づきます

#Pythonの18日目(a)の学習に基づきます

反射

概念が最初に提案1982年スミスによって反射され、主にそれがプログラム缶アクセス、自身の状態や動作(イントロスペクション)を検出し、修正する能力を指します。これは、前方迅速コンピュータサイエンスの反射の応用に関する研究につながっコンセプトを置きます。これは、第一言語の設計をプログラミングの分野で使用された、とLispとオブジェクト指向の面で実績をあげています。

パイソンリフレクティブなオブジェクト指向:オブジェクトに関連するプロパティが文字列で動作しました。すべてが(リフレクションを使用することができる)Pythonでオブジェクトであります

四つの機能が内省的な達成することができます

以下の方法は、クラスおよびオブジェクトに適用可能である(すべてが対象であり、クラス自体が目標です)

1.1反射物体

class Foo:
    f = '类的静态变量'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print('hi,%s'%self.name)

obj=Foo('egon',73)

#检测是否含有某属性
print(hasattr(obj,'name'))
print(hasattr(obj,'say_hi'))

#获取属性
n=getattr(obj,'name')
print(n)
func=getattr(obj,'say_hi')
func()

print(getattr(obj,'aaaaaaaa','不存在啊')) #报错

#设置属性
setattr(obj,'sb',True)
setattr(obj,'show_name',lambda self:self.name+'sb')
print(obj.__dict__)
print(obj.show_name(obj))

#删除属性
delattr(obj,'age')
delattr(obj,'show_name')
delattr(obj,'show_name111')#不存在,则报错

print(obj.__dict__)

对实例化对象的示例

反射型の1.2対

class Foo(object):

    staticField = "old boy"

    def __init__(self):
        self.name = 'wupeiqi'

    def func(self):
        return 'func'

    @staticmethod
    def bar():
        return 'bar'

print getattr(Foo, 'staticField')
print getattr(Foo, 'func')
print getattr(Foo, 'bar')

現在のモジュール1.3を反映

import sys


def s1():
    print 's1'


def s2():
    print 's2'


this_module = sys.modules[__name__]

hasattr(this_module, 's1')
getattr(this_module, 's2')

1.4を反映し、他のモジュール

#一个模块中的代码
def test():
    print('from the test')
"""
程序目录:
    module_test.py
    index.py


当前文件:
    index.py
"""
# 另一个模块中的代码
import module_test as obj

#obj.test()

print(hasattr(obj,'test'))

getattr(obj,'test')()

反射の1.5アプリケーション

反射の4つの機能をご覧ください。その後の使用は、それが何であるかを最終的に反射?そのシナリオは、それがどのようなものですか?

今、聞かせてのは、ブラウザを開き、ウェブサイトを訪問、ログオンするためのログイン画面にジャンプする]をクリックし、インターフェイスを登録する登録ジャンプをクリックして、というように、実際にあなたが実際にリンクのいずれか、それぞれをクリックしてくださいリンクに対処するための関数やメソッドを持つことになります。

反射を学ぶことがなかった以前のソリューション

class User:
    def login(self):
        print('欢迎来到登录页面')

    def register(self):
        print('欢迎来到注册页面')

    def save(self):
        print('欢迎来到存储页面')


while 1:
    choose = input('>>>').strip()
    if choose == 'login':
        obj = User()
        obj.login()

    elif choose == 'register':
        obj = User()
        obj.register()

    elif choose == 'save':
        obj = User()
        obj.save()

反射ソリューションを学んだ後

class User:
    def login(self):
        print('欢迎来到登录页面')

    def register(self):
        print('欢迎来到注册页面')

    def save(self):
        print('欢迎来到存储页面')

user = User()
while 1:
    choose = input('>>>').strip()
    if hasattr(user,choose):
        func = getattr(user,choose)
        func()
    else:
        print('输入错误。。。。')

あなたがはっきりと反射のメリットを感じることができるように、私たちは辞書を使用している方法は、実際の思想を反映したものです

また、手渡しの方法を書き込む前に私達はちょうど反射率

おすすめ

転載: www.cnblogs.com/bky20061005/p/12131402.html