目的描述:
在以下代码中,通过调用 aaa.bbb() 可以输出 bbb ,通过调用 ccc() 可以输出 ccc
class aaa:
def bbb():
print('bbb')
def ccc():
print('ccc')
str1 = 'aaa'
str2 = 'bbb'
str3 = 'ccc'
aaa.bbb() # bbb
ccc() #ccc
然而若想通过字符串进行方法的调用,将出现如下报错:
- 直接方法调用报错 TypeError: 'str' object is not callable :
str3() # TypeError: 'str' object is not callable
- 类中方法调用报错 AttributeError: 'str' object has no attribute 'str2' :
str1.str2() # AttributeError: 'str' object has no attribute 'str2'
函数介绍:
-
locals()[str] ,可将字符串转化为类或者方法对象,其中 str 为类名或方法名,如:
locals()[str1] # 转化字符串为类对象
locals()[str3]() # 转化字符串为方法对象
# globals()[str3]() # 用法作用与locals一致,区别是locals作用范围是本文件,globals为全局
- getattr(object, str) ,可将指定类中的方法名转化为方法,其中 object 为类对象,str 为方法名,要注意的是,与 locals() 不同,object 只能为指定类,不可为字符串,如:
getattr(aaa, str2)() # 将指定类中的方法名转化为方法
解决方法:
直接看代码:
class aaa:
def bbb():
print('bbb')
def ccc():
print('ccc')
str1 = 'aaa'
str2 = 'bbb'
str3 = 'ccc'
# 直接方法调用
locals()[str3]() # ccc
# 类中方法调用
getattr(locals()[str1], str2)() # bbb