[英]Requirements for Keyword Argument Unpacking
在Python中支持自定義類的關鍵字參數解包需要什么? 在Python 2.7和Python 3.6解釋器中,嘗試解壓縮不兼容類型時會出現以下錯誤消息:
>>> dict(**None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type object argument after ** must be a mapping, not NoneType
映射是否意味着對象必須專門子類化collections.Mapping
? 或者在這種情況下映射其中一個偽類型,例如iterable ,你不必顯式地繼承collections.Iterable
來支持iter()
? Python 2和3之間的這種行為有何不同?
Mapping是用於關聯鍵/值對的通用容器。
從collections.Mapping
繼承並不是必須的。為了使用字典解包而進行映射。 此外, collections.Mapping
是一個抽象類,所以你仍然必須重寫一些方法,以便能夠使用dict解包與它的任何子類。
對於要被dict解包的類的實例,類足以實現一個keys
方法和相應的__getitem__
方法來返回給定鍵的值:
class D(object):
def __getitem__(self, key):
return 2
def keys(self):
return ['1','2','3']
print(dict(**D()))
# {'1': 2, '2': 2, '3': 2}
以下是用於mapping
的Python 詞匯表條目 :
一個容器對象,它支持任意鍵查找並實現Mapping或MutableMapping抽象基類中指定的方法。 示例包括dict,collections.defaultdict,collections.OrderedDict和collections.Counter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.