簡體   English   中英

在python中傳遞函數引用

[英]passing a function reference in 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'

這可能是因為您需要在字典理解中將self作為feature_func的第一個參數包括在內。 另外,您需要將**放在kwarg前面。 您可能還需要按以下方式在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必須是一個錯字,因為如果那確實是您的代碼中的名字,我認為這不會改變名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM