如何基于索引动态调用类方法?解决'str'对象不可调用错误
解决动态调用类方法的问题
你遇到的报错是因为列表里存的是方法名的字符串,字符串本身无法被当作函数调用。这个思路完全可行,给你两种简单的实现方案:
方案一:直接存储方法对象
把列表里的字符串换成类方法的实例对象,这样拿到后可以直接调用:
def CallMethod(self): # 直接存入方法对象,而非字符串 Method_List = [ self.Method_1, self.Method_2, self.Method_3, self.Method_4 ] # 注意这里是赋值运算符=,不是比较运算符== self.base_index = 1 # 获取目标方法对象 self.MethodType = Method_List[self.base_index] # 直接调用方法 result = Table([self.MethodType()])
方案二:通过字符串获取方法对象(适合必须用字符串的场景)
如果因为配置读取等原因必须存方法名字符串,用getattr()函数从实例中取出对应的方法对象再调用:
def CallMethod(self): Method_List = [ 'Method_1', 'Method_2', 'Method_3', 'Method_4' ] self.base_index = 1 self.MethodType = Method_List[self.base_index] # 从实例中获取对应方法对象,然后调用 target_method = getattr(self, self.MethodType) result = Table([target_method()])
另外提下你代码里的两个小问题:
self.base_index == 1是比较操作,应该改成赋值self.base_index = 1- 最后一行的
self.MainBodyType()应该替换成动态获取的方法调用,否则逻辑不匹配
内容的提问来源于stack exchange,提问作者2020db9
相关产品推荐
相关产品推荐

