作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道是否可以对自己的类使用星形解包,而不是像 list
和 tuple
这样的内置函数。
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/
下面是The Shapes of CSS的代码.我想在这里详细了解CSS属性。 CSS 中的形状是如何工作的?伪 CSS、边框和 CSS3 属性。需要清除有关核心 CSS 属性的一些概念。 #star
我是一名优秀的程序员,十分优秀!