Seb*_*zny 6 python class python-3.x iterable-unpacking
我想知道是否可以使用自己的类进行星形解包,而不仅仅是使用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
Run Code Online (Sandbox Code Playgroud)
并且能够写作
agent = Agent([1,2,3,4])
myfunc(*agent)
Run Code Online (Sandbox Code Playgroud)
但我得到:
TypeError: visualize() argument after * must be a sequence, not Agent
Run Code Online (Sandbox Code Playgroud)
为了使拆包成为可能,我必须实施哪些方法?
异常消息:
*之后的参数必须是一个序列
应该说,argument after * must be an iterable.
由于这个原因,星形拆包通常称为"可迭代拆包".请参阅PEP 448(附加拆包概括)和PEP 3132(扩展可迭代解包).
编辑:看起来这已经修复了python 3.5.2和3.6.将来会说:
*之后的参数必须是可迭代的
为了让星形解包,你的类必须是可迭代的,即它必须定义一个__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)
Run Code Online (Sandbox Code Playgroud)
然后:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |