gpt4 book ai didi

python - 明星为自己的类(class)拆包

转载 作者:太空狗 更新时间:2023-10-29 22:21:34 26 4
gpt4 key购买 nike

我想知道是否可以对自己的类使用星形解包,而不是像 listtuple 这样的内置函数。

class Agent(object):
def __init__(self, cards):
self.cards = cards
def __len__(self):
return len(self.cards)
def __iter__(self):
return self.cards

会写

agent = Agent([1,2,3,4])
myfunc(*agent)

但是我得到:

TypeError: visualize() argument after * must be a sequence, not Agent

为了使解包成为可能,我必须实现哪些方法?

最佳答案

异常信息:

argument after * must be a sequence

应该说,* 之后的参数必须是可迭代的

由于这个原因,星型拆包通常被称为“可迭代拆包”参见 PEP 448 (Additional Unpacking Generalizations)PEP 3132 (Extended Iterable Unpacking) .

编辑:看起来这是 fixed for python 3.5.2 and 3.6 .将来它会说:

argument after * must be an iterable


为了进行星号解包,您的类必须是可迭代的,即它必须定义一个返回迭代器的 __iter__:

class Agent(object):
def __init__(self, cards):
self.cards = cards
def __len__(self):
return len(self.cards)
def __iter__(self):
return (card for card in self.cards)

然后:

In [11]: a = Agent([1, 2, 3, 4])

In [12]: print(*a) # Note: in python 2 this will print the tuple
1 2 3 4

关于python - 明星为自己的类(class)拆包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com