【发布时间】:2018-12-28 03:52:18
【问题描述】:
我正在尝试调用显示为 view()、add()、delete、 和 exit_program 的元组中的函数。但是,每当我运行代码时,控制台都会返回:
TypeError: view() missing 1 required positional argument: 'self'
我也尝试在函数前面包含 self 或 Menu,但无济于事。有没有办法解决这个问题?
代码如下:
from collections import namedtuple
class Menu(object):
def view(self):
pass
def add(self):
pass
def delete(self):
pass
def exit_program(self):
exit()
Option = namedtuple("Option", "label", "function")
_separator = "=" * 25
_options = {1: Option('View goals', view()), 2: Option('Add new goal', add()),
3: Option('Delete existing goal', delete()), 4: Option('Exit program', exit_program())}
【问题讨论】:
-
view()在非上下文对象中调用方法 -
如果您尝试将方法的引用放入您的选项映射中,您不应该调用它们。但这整件事看起来有点复杂,这些东西不应该属于菜单的一个instance而不是class吗?
-
这些是类方法,因此您需要实际创建一个类对象才能将它们作为该对象上的方法调用。它应该看起来像
mymenu=Menu(),然后是mymenu.view()等。函数(而不是方法)没有包装在一个类中。 -
@enumaris 它们被定义为实例方法,而不是类方法。见stackoverflow.com/questions/17134653/…
-
Option('View goals', view)?