我試圖更改Python類的字典,以便每次將函數對象添加到字典中時,我都會添加我的類的實例,而我將其重新定義爲__call__
。 我使用的字典類的元類和__setitem__
的自定義字典我正在實例化我用來更改添加函數的行爲的類,並向字典中添加一個不是NoneType對象。但是,當我用包裝的函數實例化類並嘗試調用相應的函數時,我得到一個「NoneType not callable」錯誤,並且我在類字典中包裝的函數對象爲= None。任何想法,爲什麼這可能發生?謝謝!在Python類字典中更改值時的無類型
回答
我開始準備 - 是張貼代碼的實際代碼?它在Python 3.2下實際上並不適用 - 我已經修復了一下。下面是我變了,開始:現在
class_dict = list()
是
class_dict = {}
和OverloadedFunction.__call__
:
for fkey, function in class_dict.items():
inspect_t = inspect.getfullargspec(function)
print(inspect_t)
在member_dict.__setitem__
:
if value.__class__.__name__ == "function":
class_dict[key] = value
dict.__setitem__(self,key,OverloadedFunction(key,value))
我相信這是你的意圖nded。我從來沒有得到NoneType not callable
錯誤 - 這些修改(加import inspect
頂部),你的代碼的作品,並打印參數規格:
$ python3 temp.py
FullArgSpec(args=['self', 'a', 'b'], varargs=None, varkw=None, defaults=None, kwonlyargs=[], kwonlydefaults=None, annotations={'a': <class '__main__.Asteroid'>, 'b': <class '__main__.Asteroid'>})
現在,你要實現的多重方法 - 修改我做了排除,由於您的多方法在每次調用__setitem__
時被覆蓋,因此您可以從那裏開始工作(也許可以使用collections.defaultdict(list)
和append
改爲class_dict[key]
)。
我可以提出一些建議嗎?我不認爲你需要一個元類 - http://www.artima.com/weblogs/viewpost.jsp?thread=101605爲Python 2.x提供了一個多方法實現,這非常簡單。
10倍,爲答案!:)是的,這是我的實際代碼,它爲我工作(我沒有複製導入)。但class_dict不能是一個字典(因爲這裏的重點是添加多個函數一個和相同的名稱,它們的區別僅在於它們的參數的註釋,如果我們使用了一個字典(這種方法只會添加最後一個函數),那麼這個名稱是不能做到的。我想檢查碰撞被調用的參數的類型這就是爲什麼我要檢查什麼傳遞給__call__而不是什麼在class_dict(我會從class_dict調用函數,一旦我看到哪一個我應該調用) – asenovm
@iLate,是分配使用元類,multimethods ,或者兩者都不是?如果它是後兩者之一,那麼你應該看看那篇文章 - 它很簡單。 – senderle
該鏈接的+1,特別是btw。 – senderle
我不知道你究竟做了什麼,但你可能會發現setdefault有用:
setdefault(鍵[,默認值])
如果關鍵是在字典 ,返回它的價值。 如果不是,插入鍵值爲 默認並返回默認值。默認 默認爲無。
- 1. 重構字典,更改密鑰類型
- 2. Python類型提示 - 指定鍵,值類型的字典子
- 3. 在Python中繪製排序後的字典類型的值
- 4. 更改字典中的值python 2.7
- 5. 平均類型的字典在Python
- 6. Python:在導入的字典中更改值無效
- 7. 在VB.NET中強類型的字典類
- 8. 字典值類型NSNotificationCenter USERINFO
- 9. 更改詞典詞典中的每個詞典的類型
- 10. 在運行時更改類的類型
- 11. Swift中的通用字典值類型
- 12. 限制C#字典中的值類型:
- 13. dict.items()在python字典返回類型
- 14. 字典的值更改爲一個字典的關鍵在python
- 15. 如何從嵌套類型的字典的字典在Python
- 16. 類型字典?
- 17. 在Python中更改內容類型
- 18. 當索引到字典時Python無類型不可調用
- 19. 爲什麼Swift中的字符串,數組和字典更改爲值類型
- 20. 如何在單擊UITableView中的字典類型行時顯示字典值?
- 21. Python:字典中的直方圖類型字典
- 22. Python的映射類型的字典
- 23. Python的字典類型的錯誤
- 24. 更改字典中的值
- 25. 字典中的泛型類
- 26. Python - 爲字典中的值分配一個類型
- 27. Python的JSON unhashable類型:「字典」
- 28. Python字典:unorderable類型的錯誤
- 29. 的Python - 類型(名稱,鹼,字典)
- 30. Python的字典創建類型錯誤
可能想向我們展示您的實際代碼。 – FogleBird
添加了代碼10x。雖然沒有正確格式化。我會看看能做些什麼。 – asenovm
@iLate,看起來像你有一個標籤和空格的混合。 (標籤和空格的混合笑起來很不錯...)。 – senderle