栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用方法名称字符串在Python 2.7中进行动态方法调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用方法名称字符串在Python 2.7中进行动态方法调用

如果要在对象(包括导入的模块)上调用方法,则可以使用:

getattr(obj, method_name)(*args) #  for this question: use t[i], not method_name

例如:

>>> s = 'hello'>>> getattr(s, 'replace')('l', 'y')'heyyo'

如果您需要在当前模块中调用函数

getattr(sys.modules[__name__], method_name)(*args)

args
要发送的参数列表或元组在哪里,或者您可以像其他任何函数一样在调用中将它们列出。由于您正在尝试在同一对象上调用另一个方法,因此请使用第一个方法
self
代替
obj

getattr获取一个对象和一个字符串,并在对象中进行属性查找,如果存在则返回属性。

obj.x
getattr(obj,'x')
达到相同的结果。如果您想进一步研究这种反映,还可以使用
setattr
hasattr
delattr
功能。


完全替代的方法:
在注意到此答案已引起广泛关注之后,我将针对您的工作提出一种不同的方法。我假设存在一些方法

def methA(*args): print 'hello from methA'def methB(*args): print 'bonjour de methB'def methC(*args): print 'hola de methC'

为了使每个方法都对应一个数字(选择),我构建了一个将数字映射到方法本身的字典

id_to_method = {    0: methA,    1: methB,    2: methC,}

鉴于此,

id_to_method[0]()
将调用
methA
。它有两个部分,首先是
id_to_method[0]
从字典中获取函数对象,然后
()
调用它。我也可以
id_to_method[0]("whatever","args", "I", "want)
在您的真实代码中传递参数,鉴于上述情况,您可能会遇到类似

choice = int(raw_input('Please make a selection'))id_to_method[choice](arg1, arg2, arg3) # or maybe no arguments, whatever you want


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号