在python中传递函数引用

2024-09-30 18:12:44 发布

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

好吧,我看到了一些奇怪的东西,我想我误解了如何在python中传递函数。。你知道吗

class Foo:
  def execute(self, **kwargs):
    print "self is ", self # <foo.Foo object at 0x1012948d0>
    features = {func_name: feature_func(kwargs, arg=arg)for func_name, 
                              feature_func in Foo.ALGORITHMS.items()}

  def func1(self, **kwargs):
     print "self is " , self # prints {}
     self._funchelp()

  def __funchelp(self):
     # pass


  ALGORITHMS = {'func1': func1}

所以,我不明白的是,为什么自我印刷是一个空字典??你知道吗

features = {func_name: feature_func(kwargs, arg=arg)for func_name, 
                              feature_func in Foo.ALGORITHMS.items()}

上面有些东西搞砸了

然后呢

自我帮助() 返回AttributeError: 'dict' object has no attribute '_Foo__funchelp'


Tags: nameselfobjectfooisdefargkwargs
1条回答
网友
1楼 · 发布于 2024-09-30 18:12:44

这可能是因为你需要把self作为你的dict理解中feature_func的第一个参数。此外,还需要将**放在kwargs前面。您可能还需要如下设置kwargs上的'arg'键,以避免某种参数错误。但不确定:

kwargs['arg'] = 123
features = {func_name: feature_func(self, **kwargs) for func_name, 
                          feature_func in Foo.ALGORITHMS.items()}

这个奇怪的错误可能是因为您试图将_funchelp作为一个空dict对象的属性来访问。此外,您的函数被定义为带有两个下划线的__funchelp,这可以通过python获得mangled,因为它在内部处理双下划线属性的方式。我想_funchelp一定是个拼写错误,因为如果你的代码中真的是这样的话,我不认为它会弄坏你的名字。你知道吗

相关问题 更多 >