例如:
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
类)的情况下完成这项工作吗?或者这只是我无法使用的一些幕后魔法?
最佳答案
您需要覆盖 __iter__
或 __getitem__
。下面是一个使用 __iter__
的例子:
class Test(object):
def __iter__(self):
return iter([1, 2])
a,b = Test()
注意,__iter__
需要返回一个迭代器。最简单的方法是将您的数据结构包装在 iter
中,或者让它从生成器中产生。
有关使用 __getitem__
的示例,请参阅 jonrsharpe 的出色回答。
关于python - 我可以创建一个可以解包的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330001/