python - 我可以创建一个可以解包的类吗?

标签 python python-2.7 iterator

例如:

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。我可以在不继承 listtuple (或它们各自的 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/

相关文章:

java - 如何检查在迭代器中强制转换为 T 是否安全?

python - 如何从 emacs org-mode 仅导出 python 输出而不是源代码到 ODT?

python - 指定 numpy.correlate 的移位

python - Sklearn.KMeans : how to avoid Memory or Value Error?

python 2.7 isinstance 在动态导入的模块类中失败

c++ - 迭代器比数组 [i] 快吗?

Python:单冒号与双冒号

python-2.7 - Chrome 驱动程序需要在 Mac 上的路径错误中可用

python - 在 Python 2 或 Python 3 上导入 Openpyxl

c++ - 有没有办法在 unordered_map 的某个位置插入元素?