如何从 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】:您没有将任何值分配给 values
和 functions
变量到 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 的列表中调用我自己的方法?的主要内容,如果未能解决你的问题,请参考以下文章