Python:我可以在字典中用字符串作为键,用函数作为值吗?

2024-10-01 11:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

换言之,这给我错误纯粹是因为它不可能真正做到,还是我只是写错了:

class someClass:

    self.myString = "Hello"
    self.myMap =  {
    'someString' : self.functionInClass
    }

如果functionInClass接受一个参数,我想从类中的任何地方这样调用它:

self.myMap[self.myString](theArgument)

这只会产生:

NameError: name 'self' is not defined

任何帮助都将不胜感激。你知道吗


Tags: nameselfhello参数is地方错误class
3条回答

你想做的事没有什么不可能的:

class Test(object):

  def func1(self, arg):
    print 'func1, arg=%s' % arg

  def func2(self, arg, **kwargs):
    print 'func2, arg=%s, kwargs=%s' % (arg, kwargs)

  funcmap = {'func1': func1, 'func2': func2}

  def invoke(self, fname, *args, **kwargs):
    Test.funcmap[fname](self, *args, **kwargs)

test = Test()
test.invoke('func1', 0)
test.invoke('func2', 42, kw=12)

这是完全正确的。你知道吗

>>> def f():
...     print "test"
...
>>> d = {'df':f}
>>> d['df']()
test
>>>

这个测试代码不使用类,但同样的事情也可以用类来完成。错误表明self没有定义,它与字典中的函数无关。你知道吗

是的,您可以这样做,因为方法(或绑定方法)只是对象本身。你知道吗

在你的代码中你忘记了你的函数。我想你想写这样的东西:

class someClass:
    def __init__(self):
        self.myString = "Hello"
        self.myMap =  {
            'someString' : self.functionInClass
        }

    def functionInClass(self):
        pass

相关问题 更多 >