python根据字符串调⽤类_Python通过字符串调⽤类⽅法或⽅
问题描述
今天遇到个问题,在⼀个类⾥⾯,想要通过字符串调⽤类⾥⾯的⽅法,即(注意,以下为错误代码演⽰,只是为了表述问题):
class A(object):def a(self):
print('xxxxx')
def b(self):
c= 'a'
self.c()
test = A()
test.b()
如上⾯代码所⽰,在b函数⾥⾯,我将字符 a 赋值给了 c ,然后在后⾯,想要通过 self.c() 的⽅式,来替代 self.a(),完成对 a 函数的调⽤。当然,上⾯的代码毫⽆疑问的报错了,那么,怎么才能通过字符串调⽤类⾥⾯的函数呢?
解决⽅法
⾸先,来解决类⾥⾯通过字符串来调⽤函数的问题,其实也很简单,我们需要⽤到⼀个稍微⾼阶⼀点的Python⾃带函数: getattr()
直⽩的说,这个函数是获取⼀个实例(也可以说是类)⾥⾯的属性或⽅法。⽤法为:getattr(object, name[, default])
第⼀个object参数为: 传⼊⼀个实例或者类
第⼆个name参数为:  你想要获得的这个类或实例⾥⾯的属性或⽅法的名称
菜鸟教程python函数第三个参数default为: 如果没有在这个类或实例⾥⾯到对应的属性或⽅法,应该返回什么。
如果想要详细了解这个内建函数的使⽤⽅法,请看:Python getattr() 函数 | 菜鸟教程
这⾥举个例⼦:
class A(object):
def a(self):
print('sfsdf')
test = A()
print(getattr(test, 'a', 'None'))
print(getattr(test, 'b', 'None'))
从上⾯的代码,我们可以看到,getattr()函数获得了 test 实例⾥⾯的 a ⽅法,然后将该⽅法打印了出来,我们还想获取 test 实例的 b ⽅法, 但是 test 实例并没有 b ⽅法,所以就返回了我们预先指定的 None。这就是getattr() 函数的⽤法。说到这⾥,相信不少童鞋已经知道怎么通过字符串调⽤类⽅法了,完整代码如下:class A(object):
def a(self):
print('GodLordGee')
def b(self):
c= 'a'
func = getattr(self, c, None)
func()
test = A()
test.b()
如上,我们就可以通过字符串,调⽤类⾥⾯的⽅法了。
也许很多童鞋能够理解这个内建函数的⽤法,但是却不知道这个函数的实际使⽤场景,那么我可以在这⾥给你提供⼀个使⽤场景:
你写了⼀个类,类⾥⾯有很多个功能函数,还有⼀个主函数。在主函数⾥⾯,会传进来不同的字符串,这些字符串表⽰程序想要调⽤的⽅法。例如:主函数传进来⼀个 ‘start’ 字符串,表⽰程序现在要调⽤start函数;⼜过了⼀会,主函数传进来了⼀个 'pause' 字符串,表⽰程序现在想要调⽤pause函数;
再过了⼀会,主函数传进来了⼀个‘stop’ 字符串,表⽰程序现在想要调⽤stop函数。那么,如上所述的⼀个过程,我们只需要⼀个getattr()函数,就可以很⽅便的调⽤类⾥⾯的各种⽅法。
扩展知识
知道了如何通过字符串调⽤类⾥⾯的⽅法,那么,如果通过字符串直接调⽤⽅法呢?这⾥有三个函数可以帮助我们实现这个功能(eval、locals、globals):>>> def a():
print('I am a')
>>> def b():
print('I am b')
>>> eval('a')
>>> eval('a')()
I am a
>>> eval('b')()
I am b
>>> locals()['a']()
I am a
>>> locals()['b']()
I am b
>>> globals()['a']()
I am a
>>> globals()['b']()
I am b
>>>
相信通过上⾯的代码,⼤家已经知道如果通过字符串调⽤⽅法了。如果想要详细了解上述三个函数的具体⽤法,请⾕歌百度哦~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。