gpt4 book ai didi

python - 通过字符串调用方法

转载 作者:太空狗 更新时间:2023-10-29 22:09:50 25 4
gpt4 key购买 nike

我有以下类(class)。

func_list= ["function1", "function2", "function3"]

class doit(object):
def __init__(self):
for item in func_list:
if item == "function1":
self.function1()
elif item == "function2":
self.function2()
elif item == "function3":
self.function3()

def function1(self):
#do this
pass
def function2(self):
#do that
pass
def function3(self):
pass

如果创建了此类的实例,它会遍历字符串列表并根据实际字符串调用方法。列表中的字符串具有相应方法的名称。

我怎样才能以更优雅的方式做到这一点?我不想为添加到列表中的每个“函数”添加另一个 elif 路径。

最佳答案

func_list= ["function1", "function2", "function3"]

class doit(object):
def __init__(self):
for item in func_list:
getattr(self, item)()
def function1(self):
print "f1"
def function2(self):
print "f2"
def function3(self):
print "f3"



>>> doit()
f1
f2
f3

对于私有(private)函数:

for item in func_list:
if item.startswith('__'):
getattr(self, '_' + self.__class__.__name__+ item)()
else:
getattr(self, item)()

.

getattr(object, name[, default])

返回对象命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x, 'foobar') 等同于 x.foobar。如果指定的属性不存在,如果提供则返回默认值,否则引发 AttributeError。

http://docs.python.org/library/functions.html#getattr

关于python - 通过字符串调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com