2 回答

TA貢獻1815條經驗 獲得超10個贊
選項1: __iter__
強制轉換為tuple或dict,或采用可迭代的任何類型,都依賴于此__iter__方法。
class ListOfKeys():
def __init__(self, lst):
self.lst = lst
def __iter__(self):
for k in self.lst:
yield (k, None)
lok = ListOfKeys([1, 2, 3])
d = dict(lok)
print(d) # {1: None, 2: None, 3: None}
同樣適用于元組。
t = tuple(lok)
print(t) # ((1, None), (2, None), (3, None))
選項2:keys和__getitem__
另外,要強制轉換為a dict,您可以同時實現keys和__getitem__。
class ListOfKeys():
def __init__(self, lst):
self.lst = lst
def keys(self):
yield from self.lst
def __getitem__(self, item):
return None
lok = ListOfKeys([1, 2, 3])
d = dict(lok)
print(d) # {1: None, 2: None, 3: None}
選項3:兩者都支持多種類型
最后,如果您希望您的類對adict和a進行強制轉換具有不同的行為tuple,下面的示例演示了dict優先于keysand__getitem__解決方案的問題。
class Foo:
def __iter__(self):
yield 1
def keys(self):
yield 2
def __getitem__(self, item):
return 3
print(dict(Foo())) # {2: 3}
print(tuple(Foo())) # (1,)
添加回答
舉報