加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python反射用法

发布时间:2020-12-20 10:55:10 所属栏目:Python 来源:网络整理
导读:反射在python中是一个很重要的东西,但是具体怎么用呢?让我们来看看。 首先我们来创建一个类,并且定义了2个普通方法,和一个类方法 class Foo: dic = { ‘ foo1 ‘ : ‘ fun1 ‘ , ‘ foo2 ‘ : ‘ fun2 ‘ } def func1(self): print ( ‘ func1 ‘ ) def

反射在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读