[英]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.