例如:
x = (1, 2)
a,b = x
现在我想在x
是某个类的实例而不是列表或元组的情况下完成这一点。简单地重写__getitem__
或__getslice__
不起作用:
class Test(object):
def __getitem__(self, key):
return 1
a,b = Test()
结果是ValueError: too many values to unpack
。我可以不从list
或tuple
(或它们各自的UserX
类)继承而实现这个功能吗?或者这只是我无法使用的秘密魔法?你知道吗
Tags:
您需要重写
__iter__
或__getitem__
。下面是一个使用__iter__
的示例:小心,
__iter__
需要返回迭代器。最简单的方法是将数据结构包装在iter
中,或者让它从生成器生成。你知道吗有关使用
__getitem__
的示例,请参见jornsharpe的优秀答案。你知道吗PerPEP-234,它定义迭代器(emphasis mine):
你可以用
__getitem__
来做这件事,但是它必须抛出一个IndexError
来指示你何时到达终点。看到too many values to unpack
是因为Python无法判断它已经完成了对对象的迭代。你知道吗这将起作用:
使用中:
相关问题 更多 >
编程相关推荐