【script】python通过字符串调用方法

目的描述:

在以下代码中,通过调用 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
发布了33 篇原创文章 · 获赞 2 · 访问量 1457

猜你喜欢

转载自blog.csdn.net/qq_34965596/article/details/103485441