Python 字典中类内的函数

Python 字典中类内的函数,python,python-3.x,class,dictionary,Python,Python 3.x,Class,Dictionary,我试图将一个在类中生成的函数放入字典中,但不断得到错误“name”eggs“未定义”。这就是我到目前为止所尝试的 class spam(object): def __init__(self,my_dict={'eggs',eggs}): self.my_dict=my_dict def eggs(self): print('eggs') 我也尝试过在课外使用 class spam(object): def __init__(self,my

我试图将一个在类中生成的函数放入字典中,但不断得到错误“name”eggs“未定义”。这就是我到目前为止所尝试的

class spam(object):
    def __init__(self,my_dict={'eggs',eggs}):
        self.my_dict=my_dict
    def eggs(self):
        print('eggs')
我也尝试过在课外使用

class spam(object):
    def __init__(self,my_dict):
        self.my_dict=my_dict
    def eggs(self):
        print('eggs')

my_dict={'eggs':eggs}
我还尝试将该词典替换为:

{'eggs':eggs()}
{'eggs':spam.eggs}
{'eggs':spam.eggs()}
有人可以告诉我如何创建此字典,或者根据字符串输入调用此函数的其他方法。

您必须创建类的实例才能访问该函数。您可以在课外进行此操作:

{'eggs':spam().eggs}

在类之外,
eggs
是一个非静态类方法,因此如果没有类实例(如

{'eggs': spam().eggs}

你可以考虑静态化,如果你想使用

@staticmethod
def eggs ():
    print('eggs')

所以像
{'eggs':spam.eggs}
这样的东西就行了。

\uuuu init\uuuuu()
中创建字典


如果要存储原始方法而不是绑定实例方法,请使用
spam.eggs
type(self).eggs
(两者的语义稍有不同)。

您到底在忙什么?你确定你要找的是
\uuuuu int\uuuu
而不是
\uuu init\uuuu
?为什么还要创建一个包含这些函数的字典呢?这就是类的基本功能,它们有一个保存这些信息的
\uu dict\uu
。这是一个错误,我在实际代码中使用了init,这不是问题的解决方案。它不能解决NameError。@NiklasR,当我在Python 3.6中运行它时,不会出现
NameError
,但当OP试图在
def\uu init\uuuuuuuo(self,my_dict=eggs)中将此变量用作默认值时,它仍然会给出
NameError
,我认为它只能在Python 3.5或3.6中工作。仍然
name错误:没有定义名称“垃圾邮件”
No,您是对的。它在3.5失败了。方法创建的顺序您必须编辑您的帖子,解释它只在Python3.6上工作。只有ATM的Niklas R answer适用于旧版本。
class spam(object):
  def __init__(self, my_dict=None):
    if my_dict is None:
      my_dict = {'eggs': self.eggs}
    self.my_dict = my_dict