zoukankan      html  css  js  c++  java
  • python反射用法

    反射在python中是一个很重要的东西,但是具体怎么用呢?让我们来看看。

    首先我们来创建一个类,并且定义了2个普通方法,和一个类方法

    class Foo:
        dic = {'foo1':'fun1','foo2':'fun2'}
    
        def func1(self):
            print('func1')
    
        def func2(self):
            print('func2')
    
        @classmethod
        def func3(cls):
            print('func3')
    View Code

    python反射中给我们提供了一个getattr()的方法,我们可以通过这个方法使用字符串的形式来获取到这个类的变量和类方法,并且加以调用

    ret1 = getattr(Foo,'dic')
    ret2 =getattr(Foo,'func3')
    ret2()
    print(ret2)
    
    func3
    {'foo1': '', 'foo2': ''}
    View Code

    同样伴随getattr()方法的还有一个hasattr()方法,它主要用来判断是否存在传入的值

    if hasattr(Foo,'fun4'):
        ret = getattr(Foo,'fun4')
        print(ret)
    View Code

    那么普通方法我们要怎么调用呢?其实也很简单,首先实例化该类,得到一个对象后,把该对象和方法字符串传入即可

    test = Foo()
    ret = getattr(test,'func1')
    ret()
    
    fun1
    View Code

    说了这么多,到底这个反射能给我们带来什么好处呢?比如说现在有这么一个需求,就是通过输入去执行对应的方法

    我们可以看到 如果我不用到反射机制我需要一个个的去判断,非常的麻烦,但是用到了反射后我不需要去关心你输入的是什么,我只要有相应的方法就能调用到

    msg = input('请输入对应操作')
    if msg == 'foo1':
        func1()
    elif: msg == 'foo2':
        func2()
    elif: msg == 'foo3':
        func3()
    
    #反射
    ret = getattr(Foo,msg)
    ret()
    View Code
  • 相关阅读:
    Grand Central Dispatch-thread pool pattern
    POSIX Threads
    Event-driven programming-main loop
    Data type-数据类型
    软件的动与静
    对封装好的视图进行动态修改
    编程语言进化
    Type system
    Run-time type information--RTTI
    Type system-Type checking
  • 原文地址:https://www.cnblogs.com/yaoczz/p/11387832.html
Copyright © 2011-2022 走看看