簡體   English   中英

關鍵字參數解包的要求

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

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