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')

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ret1 = getattr(Foo,'dic')
ret2 =getattr(Foo,'func3')
ret2()
print(ret2)

func3
{'foo1': '', 'foo2': ''}

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

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

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
test = Foo()
ret = getattr(test,'func1')
ret()

fun1

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

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

msg = input('请输入对应操作')
if msg == 'foo1':
    func1()
elif: msg == 'foo2':
    func2()
elif: msg == 'foo3':
    func3()

#反射
ret = getattr(Foo,msg)
ret()
posted @   I'm_江河湖海  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示