在类

时间:2019-05-05 14:20:13

标签: python python-3.x

请帮助解决下一个问题:

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'

3 个答案:

答案 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