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

Posted

技术标签:

【中文标题】如何从 Python3 的列表中调用我自己的方法?【英文标题】:How to call my own method from a list in Python3? 【发布时间】:2021-12-16 01:08:18 【问题描述】:

我正在尝试制作一个机器代码解释器,为了有效起见,我想在其中使用代码和模拟其功能的函数之间的直接关系。正如我想象的那样,我会将模拟函数放入索引列表中,并调用适当的函数来按机器代码字节索引列表。 我的问题是我不知道如何为我的类的内部方法编写列表成员(它既不适用于“self.”也不适用于“myclass.”前缀)。下面的示例代码显示了我的问题:在函数 [] 列表中,我将列出该方法,以及我想与列表的索引连接的内容。 请建议我,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

【问题讨论】:

列表应该包含实例方法(参考self):self.functions = [self.getval, self.getnextval, self.getprevval](应该在__init__方法中完成) 非常感谢您的解决方案!似乎,我的想法不是那么“pythonic”,我忘记了在 init 中定义 self 变量。这正是我想象的代码工作方式。 我的意思是您可以在其他方法中定义新属性,但是您需要在访问该属性之前调用它,但是是的,您应该在 __init__ 方法中定义所有内容 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

您没有将任何值分配给 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))

【讨论】:

以上是关于如何从 Python3 的列表中调用我自己的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Enum类和列表中调用值

如何python3中调用python2中的方法

如何从对象列表中找到最小值?

python3检查列表、元组、字符串中的重复元素

如何从包含Python3中特定索引和列的列表的dict创建Pandas DataFrame?

如何从列表数组(linq 列表)C# 中的所有元素调用方法