【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

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值