【问题标题】:How to call function within a tuple in a class?如何在类的元组中调用函数?
【发布时间】:2018-12-28 03:52:18
【问题描述】:

我正在尝试调用显示为 view()、add()、delete、exit_program 的元组中的函数。但是,每当我运行代码时,控制台都会返回:

TypeError: view() missing 1 required positional argument: 'self'

我也尝试在函数前面包含 selfMenu,但无济于事。有没有办法解决这个问题?

代码如下:

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) ?

标签: python oop


【解决方案1】:

首先,您似乎希望您的方法是“静态方法”,因为您是通过类直接调用它们(而不是类的实例)。您也可能需要“类方法”。这个answer 将帮助您确定您想要哪种类型。

其次,您不能以这种方式存储未绑定的对象。请参阅此answer

【讨论】:

  • 或者根本没有方法.. .
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2020-10-19
相关资源
最近更新 更多