好的,所以我看到一些奇怪的东西,我想我误解了如何在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'
答案 0 :(得分:1)
这可能是因为你需要在你的词典理解中包含self
作为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
必须是一个拼写错误,因为我不认为如果你的代码真的存在,那就不会破坏这个名字。