如何从 Python3 中的列表中调用我自己的方法?

How to call my own method from a list in Python3?

我正在尝试制作一个机器代码解释器,其中,为了效率,我想在代码和模拟其功能的函数之间使用直接关系。正如我想象的那样,我会将模拟函数放入一个索引列表中,并调用适当的函数按机器代码字节对列表进行索引。 我的问题是,我不知道如何为我的 class 的内部方法编写列表成员的措辞(它对“self.”和“myclass.”前缀都不起作用).下面的示例代码显示了我的问题:在 functions[] 列表中,我将列出那些方法,我想将其与列表的索引连接起来。 请给我建议,Python 3.

中最好的(希望是执行速度最快的)解决方案是什么
class myclass:

    values = [101, 102, 103, 104,105, 106, 107, 108]
    functions = [getval, getnextval, getprevval]

    def __init__(self):
        pass

    def getval(self, index):
        return self.values[index]

    def getnextval(self, index):
        return self.values[index + 1]

    def getprevval(self, index):
        return self.values[index - 1]

    def getfuncval(self, func, index):
        return(self.functions[func](index))


myobj = myclass()
print(myobj.getval(0))          # -> 101
print(myobj.getnextval(1))      # -> 103
print(myobj.getfuncval(2, 3))   # would need to get result from getprevval(3) -> 103

您没有将任何值分配给 valuesfunctions 变量到 self 对象中,也许这段代码就是解决方案:

class myclass:    
    def __init__(self):
        self.values = [101, 102, 103, 104,105, 106, 107, 108]
        self.functions = [self.getval, self.getnextval, self.getprevval]

    def getval(self, index):
        return self.values[index]

    def getnextval(self, index):
        return self.values[index + 1]

    def getprevval(self, index):
        return self.values[index - 1]

    def getfuncval(self, func, index):
        return(self.functions[func](index))


myobj = myclass()
print(myobj.getval(0))          # -> 101
print(myobj.getnextval(1))      # -> 103
print(myobj.getfuncval(2, 3))

您可以将 functions 的定义移动到 __init__

def __init__(self):
    self.functions = [self.getval, self.getnextval, self.getprevval]

还有一些其他选项,例如使用类方法。 (因为您的方法似乎不依赖于特定 myclass 实例 的任何内部状态。)