请帮助解决下一个问题:
functions_list = {
0: "printHelp",
1: "printVersion",
2: "printList"
}
class StartUp():
def printHelp():
print("help function")
def printVersion():
print("version function")
def printList():
print("list function")
startUp.functions_list[0]()
如何执行此操作?还是需要更改才能执行它?
我的执行跟踪:
>>> StartUp.printHelp()
help function
>>> StartUp.functions_list[0]()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'StartUp' has no attribute 'functions_list'
答案 0 :(得分:2)
首先,所有方法都缺少self
参数。您需要包含它或使用staticmethod
装饰器将所有方法标记为静态。
如果您坚持使用方法的字符串表示形式,则可以使用getattr
:
functions_list = {
0: "printHelp",
1: "printVersion",
2: "printList"
}
class StartUp:
def printHelp(self):
print("help function")
def printVersion(self):
print("version function")
def printList(self):
print("list function")
s = StartUp()
getattr(s, functions_list[0])()
答案 1 :(得分:1)
我不确定您为什么要这么做,但这是一个经过清理和修复的版本:
class StartUp():
def printHelp():
print("help function")
def printVersion():
print("version function")
def printList():
print("list function")
functions_list = {
0: printHelp,
1: printVersion,
2: printList
}
StartUp.functions_list[0]()
输出:
help function
但是Python不是Java,在这里拥有类确实没有任何意义。您应该只在模块级别定义函数和字典(您将其命名为functions_list
)。我什至不知道为什么要把函数字典放在首位。
答案 2 :(得分:1)
您在这里没有使用任何类,您可以先定义函数,创建正在使用的字典,然后从字典中调用
#Define functions here
def printHelp():
print("help function")
def printVersion():
print("version function")
def printList():
print("list function")
#Define dictionary here
functions_list = {
0: printHelp,
1: printVersion,
2: printList
}
#Call functions here
for item in functions_list.values():
item()
输出将为
help function
version function
list function
并且不确定为什么也要这样做,可以直接通过函数名称调用函数
#Define functions here
def printHelp():
print("help function")
def printVersion():
print("version function")
def printList():
print("list function")
printHelp()
printVersion()
printList()
输出将为
help function
version function
list function
还有一个小窍门,您可以使用修饰符@staticmethod
来使用类名直接调用方法
class StartUp:
@staticmethod
def printHelp():
print("help function")
@staticmethod
def printVersion():
print("version function")
@staticmethod
def printList():
print("list function")
StartUp.printHelp()
StartUp.printVersion()
StartUp.printList()
输出将为
help function
version function
list function