在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()}

上面有些东西弄乱了

接着

self._funchelp()返回 AttributeError: 'dict' object has no attribute '_Foo__funchelp'

大卫·桑德斯(David Sanders)

这可能是因为您需要将dict理解中self的第一个参数包括在内feature_func另外,您需要将“ **warks 放在前面。您可能还需要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弄乱我认为_funchelp一定是拼写错误,因为如果那确实是您代码中的含义,那么我认为这不会破坏名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章